By default, new and imported virtual machines obtain their resource allocation settings from the organization virtual data center on which they reside. System administrators can create a virtual machine with custom CPU and memory reservation, limit, and shares settings that are different from the values configured for the target organization VDC.

Typically, when creating virtual machines, users cannot configure custom VM reservation, limit, and shares settings. Importing or adopting a virtual machine does not retain the VM reservation, limit, and shares settings that are configured in vCenter Server. Uploading OVF templates does not retain the VM reservation, limit, and shares settings too. Newly created or imported virtual machines obtain their resource allocation settings from their organization virtual data centers.

During an instantiation from a template, you cannot reconfigure the VM reservation, limit, and shares settings.

By using the VmSpecSection section, you can create a VM with custom reservation, limit, and shares values for both CPU and memory. You can also use this section to reconfigure the resource allocation settings of a virtual machine.

Note: The custom VM resource allocation settings must not exceed the default values per VM of the organization VDC.

When you upload a VM with custom reservation, limit, and shares settings as a VM template to a catalog, the VM template retains the custom settings. Instantiations from a VM template with custom reservation, limit, and shares settings retain the custom settings but might fail if the custom settings exceed the default values per VM for the target VDC.

Copying or moving a VM with custom reservation, limit, and shares settings retains the custom settings but might fail if the custom settings exceed the default values per VM for the target VDC.

Prerequisites

This operation is restricted to system administrators and users assigned with roles that have the right vApp: Edit VM CPU and Memory Reservation / Limit / Shares in all VDC types.

Procedure

  1. Retrieve the XML representation of the organization VDC on which you want to create the new virtual machine.
    Use a request similar to:
    GET https://vcloud.example.com/api/vdc/23
    The response contains a Link element for creating a standalone VM similar to:
    <Link
     href="https://vcloud.example.com/api/vdc/23/action/createvm"
     rel="add"
     type="application/vnd.vmware.vcloud.CreateVmParams+xml"/>
  2. Create a CreateVmParams element with a VmSpecSection section that includes the custom reservation, limit, and shares settings for the new VM.
  3. POST the CreateVmParams element that you created in Step 2 to the URL from the response in Step 1.

Example: Create a VM with Custom CPU and Memory Reservation, Limit, and Shares Settings

Request:
POST https://vcloud.example.com/api/vdc/23/action/createvm
Content-Type: application/vnd.vmware.vcloud.CreateVmParams+xml
...
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CreateVmParams
   xmlns:ns3="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData"
   xmlns:ns4="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData"
   xmlns:ns5="http://schemas.dmtf.org/wbem/wscim/1/common"
   xmlns:ns6="http://www.vmware.com/schema/ovf"
   xmlns:ns7="http://schemas.dmtf.org/ovf/environment/1"
   xmlns:ns8="http://www.vmware.com/vcloud/extension/v1.5"
   xmlns:ns9="http://www.vmware.com/vcloud/versions">
   <Description>some description</Description>
   <CreateVm
      name="blank-vm1-name">
      <VmSpecSection Modified="true">
         <ns2:Info>Virtual Machine specification</ns2:Info>
         <OsType>windows9Server64Guest</OsType>
         <NumCpus>1</NumCpus>
         <NumCoresPerSocket>1</NumCoresPerSocket>
         <CpuResourceMhz>
            <Configured>1</Configured>
            <Reservation>0</Reservation>
            <Limit>1000</Limit>
            <SharesLevel>CUSTOM</SharesLevel>
            <Shares>1000</Shares>
         </CpuResourceMhz>
         <MemoryResourceMb>
            <Configured>1000</Configured>
            <Reservation>600</Reservation>
            <Limit>1000</Limit>
            <SharesLevel>CUSTOM</SharesLevel>
            <Shares>1000</Shares>
         </MemoryResourceMb>
         <DiskSection>
            <DiskSettings>
               <SizeMb>4</SizeMb>
               <UnitNumber>0</UnitNumber>
               <BusNumber>0</BusNumber>
               <AdapterType>4</AdapterType>
               <ThinProvisioned>false</ThinProvisioned>
               <StorageProfile
                  href="https://vcloud.example.com/api/vdcStorageProfile/71"
                  id="71"
                  name="*"
                  type="application/vnd.vmware.vcloud.vdcStorageProfile+xml"/>
               <overrideVmDefault>true</overrideVmDefault>
            </DiskSettings>
         </DiskSection>
         <HardwareVersion>vmx-11</HardwareVersion>
         <VirtualCpuType>VM64</VirtualCpuType>
      </VmSpecSection>
      <GuestCustomizationSection>
         <ns2:Info>Guest Customization specification</ns2:Info>
         <ComputerName>computername</ComputerName>
      </GuestCustomizationSection>
   </CreateVm>
</CreateVmParams>
Response:
Response-Code: 202
Content-type: application/vnd.vmware.vcloud.task+xml
...

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Task
   ...
   operation="Composing blank-vm1-name-cb (86)" 
   operationName="vdcComposeVapp"
   ...>
   <Owner
      .../>
   <User
      .../>
  <Organization
      .../>
  <Progress>1</Progress>
  <Details/>
</Task>