def create_basic_vm(stub_config, placement_spec, standard_network):
    """
    Create a basic VM.

    Using the provided PlacementSpec, create a VM with a selected Guest OS
    and provided name.

    Create a VM with the following configuration:
    * Create 2 disks and specify one of them on scsi0:0 since it's the boot disk
    * Specify 1 ethernet adapter using a Standard Portgroup backing
    * Setup for PXE install by selecting network as first boot device

    Use guest and system provided defaults for most configuration settings.
    """
    guest_os = testbed.config['VM_GUESTOS']

    boot_disk = Disk.CreateSpec(type=Disk.HostBusAdapterType.SCSI,
                                scsi=ScsiAddressSpec(bus=0, unit=0),
                                new_vmdk=Disk.VmdkCreateSpec())
    data_disk = Disk.CreateSpec(new_vmdk=Disk.VmdkCreateSpec())

    nic = Ethernet.CreateSpec(start_connected=True,
                              backing=Ethernet.BackingSpec(
                                  type=Ethernet.BackingType.STANDARD_PORTGROUP,
                                  network=standard_network))

    # TODO Should DISK be put before ETHERNET?  Does the BIOS automatically try
    # the next device if the DISK is empty?
    boot_device_order = [
        BootDevice.EntryCreateSpec(BootDevice.Type.ETHERNET),
        BootDevice.EntryCreateSpec(BootDevice.Type.DISK)
    ]

    vm_create_spec = VM.CreateSpec(name=vm_name,
                                   guest_os=guest_os,
                                   placement=placement_spec,
                                   disks=[boot_disk, data_disk],
                                   nics=[nic],
                                   boot_devices=boot_device_order)
    print('\n# Example: create_basic_vm: Creating a VM using spec\n-----')
    print(pp(vm_create_spec))
    print('-----')

    vm_svc = VM(stub_config)
    vm = vm_svc.create(vm_create_spec)

    print("create_basic_vm: Created VM '{}' ({})".format(vm_name, vm))

    vm_info = vm_svc.get(vm)
    print('vm.get({}) -> {}'.format(vm, pp(vm_info)))

    return vm
def run():
    global vm
    vm = get_vm(stub_config, vm_name)
    if not vm:
        raise Exception('Sample requires an existing vm with name ({}). '
                        'Please create the vm first.'.format(vm_name))
    print("Using VM '{}' ({}) for BootDevice Sample".format(vm_name, vm))

    # Create BootDevice stub used for making requests
    global boot_device_svc
    boot_device_svc = BootDevice(stub_config)

    print('\n# Example: Get current BootDevice configuration')
    boot_device_entries = boot_device_svc.get(vm)
    print('vm.hardware.boot.Device.get({}) -> {}'.format(
        vm, pp(boot_device_entries)))

    # Save current BootDevice info to verify that we have cleaned up properly
    global orig_boot_device_entries
    orig_boot_device_entries = boot_device_entries

    # Get device identifiers for Disks
    disk_svc = Disk(stub_config)
    disk_summaries = disk_svc.list(vm)
    print('vm.hardware.Disk.list({}) -> {}'.format(vm, pp(disk_summaries)))
    disks = [disk_summary.disk for disk_summary in disk_summaries]

    # Get device identifiers for Ethernet nics
    ethernet_svc = Ethernet(stub_config)
    nic_summaries = ethernet_svc.list(vm)
    print('vm.hardware.Ethernet.list({}) -> {}'.format(vm, pp(nic_summaries)))
    nics = [nic_summary.nic for nic_summary in nic_summaries]

    print('\n# Example: Set Boot Order to be Floppy, '
          'Disk1, Disk2, Disk3, Cdrom,')
    print('#          Network (nic0), Network (nic1).')
    boot_device_entries = [
        BootDevice.Entry(BootDevice.Type.FLOPPY),
        BootDevice.Entry(BootDevice.Type.DISK, disks=disks),
        BootDevice.Entry(BootDevice.Type.CDROM)
    ]
    for nic in nics:
        boot_device_entries.append(
            BootDevice.Entry(BootDevice.Type.ETHERNET, nic=nic))
    print('vm.hardware.boot.Device.set({}, {})'.format(vm,
                                                       boot_device_entries))
    boot_device_svc.set(vm, boot_device_entries)
    boot_device_entries = boot_device_svc.get(vm)
    print('vm.hardware.boot.Device.get({}) -> {}'.format(
        vm, pp(boot_device_entries)))
Exemple #3
0
def create_vm_api(request):
    datacenter_name = 'BlueKing'
    vm_folder_name = 'test'
    datastore_name = 'esxi-1-hdd'
    # session = get_unverified_session()

    session = requests.session()
    session.verify = False
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
    client = create_vsphere_client(server='10.12.33.9',
                                   username='******',
                                   password='******',
                                   session=session)

    # client = create_vsphere_client(server='10.12.0.3',
    #                                username=r'*****@*****.**',
    #                                password=r'p@ssw0rd',
    #                                session=session)

    placement_spec = get_placement_spec_for_resource_pool(
        client, datacenter_name, vm_folder_name, datastore_name)

    rec_data = json.loads(request.body.decode('utf-8'), strict=False)
    guest_os = "WINDOWS_9"
    vm_name = rec_data['name']
    memory = Memory.UpdateSpec(size_mib=int(rec_data['memory']) * 1024)
    disk = Disk.CreateSpec(new_vmdk=Disk.VmdkCreateSpec(
        capacity=int(rec_data['disk']) * 1024 * 1024 * 1024))
    vm_create_spec = VM.CreateSpec(name=vm_name,
                                   guest_os=guest_os,
                                   memory=memory,
                                   disks=[disk],
                                   placement=placement_spec)

    vm = client.vcenter.VM.create(vm_create_spec)
    print("create_default_vm: Created VM '{}' ({})".format(vm_name, vm))

    vm_info = client.vcenter.VM.get(vm)

    if (vm_info):
        return JsonResponse({
            'code':
            200,
            'data':
            "create_default_vm: Created VM '{}' ({})".format(vm_name, vm)
        })
    else:
        return JsonResponse({'code': 500, 'message': "error"})
    def run(self):
        # Get a placement spec
        datacenter_name = testbed.config['VM_DATACENTER_NAME']
        vm_folder_name = testbed.config['VM_FOLDER2_NAME']
        datastore_name = testbed.config['VM_DATASTORE_NAME']
        std_portgroup_name = testbed.config['STDPORTGROUP_NAME']
        dv_portgroup_name = testbed.config['VDPORTGROUP1_NAME']

        if not self.placement_spec:
            self.placement_spec = vm_placement_helper.get_placement_spec_for_resource_pool(
                self.client, datacenter_name, vm_folder_name, datastore_name)

        # Get a standard network backing
        if not self.standard_network:
            self.standard_network = network_helper.get_network_backing(
                self.client, std_portgroup_name, datacenter_name,
                Network.Type.STANDARD_PORTGROUP)

        # Get a distributed network backing
        if not self.distributed_network:
            self.distributed_network = network_helper.get_network_backing(
                self.client, dv_portgroup_name, datacenter_name,
                Network.Type.DISTRIBUTED_PORTGROUP)
        """
        Create an exhaustive VM.

        Using the provided PlacementSpec, create a VM with a selected Guest OS
        and provided name.

        Create a VM with the following configuration:
        * Hardware Version = VMX_11 (for 6.0)
        * CPU (count = 2, coresPerSocket = 2, hotAddEnabled = false,
        hotRemoveEnabled = false)
        * Memory (size_mib = 2 GB, hotAddEnabled = false)
        * 3 Disks and specify each of the HBAs and the unit numbers
          * (capacity=40 GB, name=<some value>, spaceEfficient=true)
        * Specify 2 ethernet adapters, one using a Standard Portgroup backing and
        the
          other using a DISTRIBUTED_PORTGROUP networking backing.
          * nic1: Specify Ethernet (macType=MANUAL, macAddress=<some value>)
          * nic2: Specify Ethernet (macType=GENERATED)
        * 1 CDROM (type=ISO_FILE, file="os.iso", startConnected=true)
        * 1 Serial Port (type=NETWORK_SERVER, file="tcp://localhost/16000",
        startConnected=true)
        * 1 Parallel Port (type=HOST_DEVICE, startConnected=false)
        * 1 Floppy Drive (type=CLIENT_DEVICE)
        * Boot, type=BIOS
        * BootDevice order: CDROM, DISK, ETHERNET

        Use guest and system provided defaults for remaining configuration settings.
        """
        guest_os = testbed.config['VM_GUESTOS']
        iso_datastore_path = testbed.config['ISO_DATASTORE_PATH']
        serial_port_network_location = \
            testbed.config['SERIAL_PORT_NETWORK_SERVER_LOCATION']

        GiB = 1024 * 1024 * 1024
        GiBMemory = 1024

        vm_create_spec = VM.CreateSpec(
            guest_os=guest_os,
            name=self.vm_name,
            placement=self.placement_spec,
            hardware_version=Hardware.Version.VMX_11,
            cpu=Cpu.UpdateSpec(count=2,
                               cores_per_socket=1,
                               hot_add_enabled=False,
                               hot_remove_enabled=False),
            memory=Memory.UpdateSpec(size_mib=2 * GiBMemory,
                                     hot_add_enabled=False),
            disks=[
                Disk.CreateSpec(type=Disk.HostBusAdapterType.SCSI,
                                scsi=ScsiAddressSpec(bus=0, unit=0),
                                new_vmdk=Disk.VmdkCreateSpec(name='boot',
                                                             capacity=40 *
                                                             GiB)),
                Disk.CreateSpec(new_vmdk=Disk.VmdkCreateSpec(
                    name='data1', capacity=10 * GiB)),
                Disk.CreateSpec(new_vmdk=Disk.VmdkCreateSpec(
                    name='data2', capacity=10 * GiB))
            ],
            nics=[
                Ethernet.CreateSpec(
                    start_connected=True,
                    mac_type=Ethernet.MacAddressType.MANUAL,
                    mac_address='11:23:58:13:21:34',
                    backing=Ethernet.BackingSpec(
                        type=Ethernet.BackingType.STANDARD_PORTGROUP,
                        network=self.standard_network)),
                Ethernet.CreateSpec(
                    start_connected=True,
                    mac_type=Ethernet.MacAddressType.GENERATED,
                    backing=Ethernet.BackingSpec(
                        type=Ethernet.BackingType.DISTRIBUTED_PORTGROUP,
                        network=self.distributed_network)),
            ],
            cdroms=[
                Cdrom.CreateSpec(start_connected=True,
                                 backing=Cdrom.BackingSpec(
                                     type=Cdrom.BackingType.ISO_FILE,
                                     iso_file=iso_datastore_path))
            ],
            serial_ports=[
                Serial.CreateSpec(
                    start_connected=False,
                    backing=Serial.BackingSpec(
                        type=Serial.BackingType.NETWORK_SERVER,
                        network_location=serial_port_network_location))
            ],
            parallel_ports=[
                Parallel.CreateSpec(start_connected=False,
                                    backing=Parallel.BackingSpec(
                                        type=Parallel.BackingType.HOST_DEVICE))
            ],
            floppies=[
                Floppy.CreateSpec(backing=Floppy.BackingSpec(
                    type=Floppy.BackingType.CLIENT_DEVICE))
            ],
            boot=Boot.CreateSpec(type=Boot.Type.BIOS,
                                 delay=0,
                                 enter_setup_mode=False),
            # TODO Should DISK be put before CDROM and ETHERNET?  Does the BIOS
            # automatically try the next device if the DISK is empty?
            boot_devices=[
                BootDevice.EntryCreateSpec(BootDevice.Type.CDROM),
                BootDevice.EntryCreateSpec(BootDevice.Type.DISK),
                BootDevice.EntryCreateSpec(BootDevice.Type.ETHERNET)
            ])
        print(
            '# Example: create_exhaustive_vm: Creating a VM using spec\n-----')
        print(pp(vm_create_spec))
        print('-----')

        vm = self.client.vcenter.VM.create(vm_create_spec)

        print("create_exhaustive_vm: Created VM '{}' ({})".format(
            self.vm_name, vm))

        vm_info = self.client.vcenter.VM.get(vm)
        print('vm.get({}) -> {}'.format(vm, pp(vm_info)))

        return vm
Exemple #5
0
network2 = network_summaries[1]
print(network2)


placement_spec = VM.PlacementSpec(folder=folder,
    #resource_pool=resource_pool,
    #host='esxi-1.prod.vmware.haf',
    host=host.host,
    datastore=datastore.datastore)

scsi_create_spec0 = Scsi.CreateSpec(bus=0, pci_slot_number=160, sharing=Scsi.Sharing.NONE)
scsi_create_spec1 = Scsi.CreateSpec(bus=1, pci_slot_number=256, sharing=Scsi.Sharing.PHYSICAL)
#scsi_create_spec2 = Scsi.CreateSpec(bus=2, pci_slot_number=256, sharing=Scsi.Sharing.PHYSICAL)

disk_create_spec0 = Disk.CreateSpec(type=Disk.HostBusAdapterType.SCSI,
                                    scsi=ScsiAddressSpec(bus=0, unit=0),
                                    new_vmdk=Disk.VmdkCreateSpec(name='disk-0', capacity=10 * GiB))
disk_create_spec1 = Disk.CreateSpec(type=Disk.HostBusAdapterType.SCSI,
                                    scsi=ScsiAddressSpec(bus=0, unit=1),
                                    new_vmdk=Disk.VmdkCreateSpec(name='disk-1', capacity=10 * GiB))

disk_create_spec2 = Disk.CreateSpec(type=Disk.HostBusAdapterType.SCSI,
                                    scsi=ScsiAddressSpec(bus=2, unit=0),
                                    new_vmdk=Disk.VmdkCreateSpec(name='disk-shared-0', capacity=4 * GiB))

#[Kingston120G] SHARED/RAC_SSD_1.vm

vm_create_spec = VM.CreateSpec(
    guest_os='CENTOS_7_64',
    name='TESTVM',
    placement=placement_spec,
Exemple #6
0
    def run(self):
        # Get a placement spec
        datacenter_name = testbed.config['VM_DATACENTER_NAME']
        vm_folder_name = testbed.config['VM_FOLDER2_NAME']
        datastore_name = testbed.config['VM_DATASTORE_NAME']
        std_portgroup_name = testbed.config['STDPORTGROUP_NAME']

        if not self.placement_spec:
            self.placement_spec = vm_placement_helper.get_placement_spec_for_resource_pool(
                self.stub_config, datacenter_name, vm_folder_name,
                datastore_name)

        # Get a standard network backing
        standard_network = network_helper.get_standard_network_backing(
            self.stub_config, std_portgroup_name, datacenter_name)
        """
        Create a basic VM.

        Using the provided PlacementSpec, create a VM with a selected Guest OS
        and provided name.

        Create a VM with the following configuration:
        * Create 2 disks and specify one of them on scsi0:0 since it's the boot disk
        * Specify 1 ethernet adapter using a Standard Portgroup backing
        * Setup for PXE install by selecting network as first boot device

        Use guest and system provided defaults for most configuration settings.
        """
        guest_os = testbed.config['VM_GUESTOS']

        boot_disk = Disk.CreateSpec(type=Disk.HostBusAdapterType.SCSI,
                                    scsi=ScsiAddressSpec(bus=0, unit=0),
                                    new_vmdk=Disk.VmdkCreateSpec())
        data_disk = Disk.CreateSpec(new_vmdk=Disk.VmdkCreateSpec())

        nic = Ethernet.CreateSpec(
            start_connected=True,
            backing=Ethernet.BackingSpec(
                type=Ethernet.BackingType.STANDARD_PORTGROUP,
                network=standard_network))

        boot_device_order = [
            BootDevice.EntryCreateSpec(BootDevice.Type.ETHERNET),
            BootDevice.EntryCreateSpec(BootDevice.Type.DISK)
        ]

        vm_create_spec = VM.CreateSpec(name=self.vm_name,
                                       guest_os=guest_os,
                                       placement=self.placement_spec,
                                       disks=[boot_disk, data_disk],
                                       nics=[nic],
                                       boot_devices=boot_device_order)
        print('\n# Example: create_basic_vm: Creating a VM using spec\n-----')
        print(pp(vm_create_spec))
        print('-----')

        vm_svc = VM(self.stub_config)
        vm = vm_svc.create(vm_create_spec)

        print("create_basic_vm: Created VM '{}' ({})".format(self.vm_name, vm))

        vm_info = vm_svc.get(vm)
        print('vm.get({}) -> {}'.format(vm, pp(vm_info)))

        return vm
def run():
    GiB = 1024 * 1024 * 1024

    print('\n# Example: List all Disks for a VM')
    disk_summaries = client.vcenter.vm.hardware.Disk.list(vm=vm)
    print('vm.hardware.Disk.list({}) -> {}'.format(vm, disk_summaries))

    # Save current list of disks to verify that we have cleaned up properly
    global orig_disk_summaries
    orig_disk_summaries = disk_summaries

    # Get information for each Disk on the VM
    for disk_summary in disk_summaries:
        disk = disk_summary.disk
        disk_info = client.vcenter.vm.hardware.Disk.get(vm=vm, disk=disk)
        print('vm.hardware.Disk.get({}, {}) -> {}'.format(
            vm, disk, pp(disk_info)))

    print('\n# Example: Create a new Disk using default settings')
    disk_create_spec = Disk.CreateSpec(new_vmdk=Disk.VmdkCreateSpec())
    disk = client.vcenter.vm.hardware.Disk.create(vm=vm, spec=disk_create_spec)
    print('vm.hardware.Disk.create({}, {}) -> {}'.format(
        vm, disk_create_spec, disk))
    global disks_to_delete
    disks_to_delete.append(disk)
    disk_info = client.vcenter.vm.hardware.Disk.get(vm, disk)
    print('vm.hardware.Disk.get({}, {}) -> {}'.format(vm, disk, pp(disk_info)))

    print(
        '\n# Example: Create a new Disk specifying the capacity in bytes \n' +
        '# and that the flat format (ie. SeSparse format) should be used.')
    disk_create_spec = Disk.CreateSpec(new_vmdk=Disk.VmdkCreateSpec(
        capacity=10 * GiB))
    disk = client.vcenter.vm.hardware.Disk.create(vm=vm, spec=disk_create_spec)
    print('vm.hardware.Disk.create({}, {}) -> {}'.format(
        vm, disk_create_spec, disk))
    disks_to_delete.append(disk)
    disk_info = client.vcenter.vm.hardware.Disk.get(vm, disk)
    print('vm.hardware.Disk.get({}, {}) -> {}'.format(vm, disk, pp(disk_info)))

    print('\n# Example: Create a new SCSI Disk')
    disk_create_spec = Disk.CreateSpec(
        type=Disk.HostBusAdapterType.SCSI,
        new_vmdk=Disk.VmdkCreateSpec(capacity=10 * GiB))
    disk = client.vcenter.vm.hardware.Disk.create(vm=vm, spec=disk_create_spec)
    print('vm.hardware.Disk.create({}, {}) -> {}'.format(
        vm, disk_create_spec, disk))
    disks_to_delete.append(disk)
    disk_info = client.vcenter.vm.hardware.Disk.get(vm, disk)
    print('vm.hardware.Disk.get({}, {}) -> {}'.format(vm, disk, pp(disk_info)))

    print('\n# Example: Create a new SCSI Disk on a specific bus')
    disk_create_spec = Disk.CreateSpec(
        type=Disk.HostBusAdapterType.SCSI,
        scsi=ScsiAddressSpec(bus=0),
        new_vmdk=Disk.VmdkCreateSpec(capacity=10 * GiB))
    disk = client.vcenter.vm.hardware.Disk.create(vm=vm, spec=disk_create_spec)
    print('vm.hardware.Disk.create({}, {}) -> {}'.format(
        vm, disk_create_spec, disk))
    disks_to_delete.append(disk)
    disk_info = client.vcenter.vm.hardware.Disk.get(vm, disk)
    print('vm.hardware.Disk.get({}, {}) -> {}'.format(vm, disk, pp(disk_info)))

    print(
        '\n# Example: Create a new SCSI Disk on a specific bus and unit number'
    )
    disk_create_spec = Disk.CreateSpec(
        type=Disk.HostBusAdapterType.SCSI,
        scsi=ScsiAddressSpec(bus=0, unit=10),
        new_vmdk=Disk.VmdkCreateSpec(capacity=10 * GiB))
    disk = client.vcenter.vm.hardware.Disk.create(vm=vm, spec=disk_create_spec)
    print('vm.hardware.Disk.create({}, {}) -> {}'.format(
        vm, disk_create_spec, disk))
    disks_to_delete.append(disk)
    disk_info = client.vcenter.vm.hardware.Disk.get(vm, disk)
    print('vm.hardware.Disk.get({}, {}) -> {}'.format(vm, disk, pp(disk_info)))

    print('\n# Example: Create a SATA controller')
    sata_create_spec = Sata.CreateSpec()
    print('# Adding SATA controller for SATA Disk')
    global sata
    sata = client.vcenter.vm.hardware.adapter.Sata.create(vm, sata_create_spec)
    print('vm.hardware.adapter.Sata.create({}, {}) -> {}'.format(
        vm, sata_create_spec, sata))

    print('\n# Example: Create a new SATA disk')
    disk_create_spec = Disk.CreateSpec(
        type=Disk.HostBusAdapterType.SATA,
        new_vmdk=Disk.VmdkCreateSpec(capacity=10 * GiB))
    disk = client.vcenter.vm.hardware.Disk.create(vm=vm, spec=disk_create_spec)
    print('vm.hardware.Disk.create({}, {}) -> {}'.format(
        vm, disk_create_spec, disk))
    disks_to_delete.append(disk)
    disk_info = client.vcenter.vm.hardware.Disk.get(vm, disk)
    print('vm.hardware.Disk.get({}, {}) -> {}'.format(vm, disk, pp(disk_info)))

    print('\n# Example: Create a new SATA disk on a specific bus')
    disk_create_spec = Disk.CreateSpec(
        type=Disk.HostBusAdapterType.SATA,
        sata=SataAddressSpec(bus=0),
        new_vmdk=Disk.VmdkCreateSpec(capacity=10 * GiB))
    disk = client.vcenter.vm.hardware.Disk.create(vm=vm, spec=disk_create_spec)
    print('vm.hardware.Disk.create({}, {}) -> {}'.format(
        vm, disk_create_spec, disk))
    disks_to_delete.append(disk)
    disk_info = client.vcenter.vm.hardware.Disk.get(vm, disk)
    print('vm.hardware.Disk.get({}, {}) -> {}'.format(vm, disk, pp(disk_info)))

    print('\n# Example: Create a new SATA disk on a specific bus and specific '
          'unit')
    disk_create_spec = Disk.CreateSpec(
        type=Disk.HostBusAdapterType.SATA,
        sata=SataAddressSpec(bus=0, unit=20),
        new_vmdk=Disk.VmdkCreateSpec(capacity=10 * GiB))
    disk = client.vcenter.vm.hardware.Disk.create(vm=vm, spec=disk_create_spec)
    print('vm.hardware.Disk.create({}, {}) -> {}'.format(
        vm, disk_create_spec, disk))
    disks_to_delete.append(disk)
    disk_info = client.vcenter.vm.hardware.Disk.get(vm, disk)
    print('vm.hardware.Disk.get({}, {}) -> {}'.format(vm, disk, pp(disk_info)))

    print('\n# Example: Create a new IDE disk')
    disk_create_spec = Disk.CreateSpec(
        type=Disk.HostBusAdapterType.IDE,
        new_vmdk=Disk.VmdkCreateSpec(capacity=10 * GiB))
    disk = client.vcenter.vm.hardware.Disk.create(vm=vm, spec=disk_create_spec)
    print('vm.hardware.Disk.create({}, {}) -> {}'.format(
        vm, disk_create_spec, disk))
    disks_to_delete.append(disk)
    disk_info = client.vcenter.vm.hardware.Disk.get(vm, disk)
    print('vm.hardware.Disk.get({}, {}) -> {}'.format(vm, disk, pp(disk_info)))

    print('\n# Example: Create a new IDE disk on a specific bus and '
          'specific unit')
    disk_create_spec = Disk.CreateSpec(
        type=Disk.HostBusAdapterType.IDE,
        ide=IdeAddressSpec(False, False),
        new_vmdk=Disk.VmdkCreateSpec(capacity=10 * GiB))
    disk = client.vcenter.vm.hardware.Disk.create(vm=vm, spec=disk_create_spec)
    print('vm.hardware.Disk.create({}, {}) -> {}'.format(
        vm, disk_create_spec, disk))
    disks_to_delete.append(disk)
    disk_info = client.vcenter.vm.hardware.Disk.get(vm, disk)
    print('vm.hardware.Disk.get({}, {}) -> {}'.format(vm, disk, pp(disk_info)))

    print(
        '\n# Example: Attach an existing VMDK using the default bus and unit')
    datastore_path = datastore_root_path + '/attach-defaults.vmdk'
    delete_vmdk_if_exist(client, service_instance._stub, datacenter_name,
                         datastore_name, datastore_path)
    create_vmdk(service_instance, datacenter_mo, datastore_path)
    disk_create_spec = Disk.CreateSpec(backing=Disk.BackingSpec(
        type=Disk.BackingType.VMDK_FILE, vmdk_file=datastore_path))
    disk = client.vcenter.vm.hardware.Disk.create(vm=vm, spec=disk_create_spec)
    print('vm.hardware.Disk.create({}, {}) -> {}'.format(
        vm, disk_create_spec, disk))
    disks_to_delete.append(disk)
    disk_info = client.vcenter.vm.hardware.Disk.get(vm, disk)
    print('vm.hardware.Disk.get({}, {}) -> {}'.format(vm, disk, pp(disk_info)))

    print('\n# Example: Attach an existing VMDK as a SCSI disk')
    datastore_path = datastore_root_path + '/attach-scsi.vmdk'
    delete_vmdk_if_exist(client, service_instance._stub, datacenter_name,
                         datastore_name, datastore_path)
    create_vmdk(service_instance, datacenter_mo, datastore_path)

    disk_create_spec = Disk.CreateSpec(type=Disk.HostBusAdapterType.SCSI,
                                       backing=Disk.BackingSpec(
                                           type=Disk.BackingType.VMDK_FILE,
                                           vmdk_file=datastore_path))
    disk = client.vcenter.vm.hardware.Disk.create(vm=vm, spec=disk_create_spec)
    print('vm.hardware.Disk.create({}, {}) -> {}'.format(
        vm, disk_create_spec, disk))
    disks_to_delete.append(disk)
    disk_info = client.vcenter.vm.hardware.Disk.get(vm, disk)
    print('vm.hardware.Disk.get({}, {}) -> {}'.format(vm, disk, pp(disk_info)))

    print('\n# Example: Attach an existing VMDK as a SCSI disk '
          'to a specific bus')
    datastore_path = datastore_root_path + '/attach-scsi0.vmdk'
    delete_vmdk_if_exist(client, service_instance._stub, datacenter_name,
                         datastore_name, datastore_path)
    create_vmdk(service_instance, datacenter_mo, datastore_path)
    disk_create_spec = Disk.CreateSpec(type=Disk.HostBusAdapterType.SCSI,
                                       scsi=ScsiAddressSpec(bus=0),
                                       backing=Disk.BackingSpec(
                                           type=Disk.BackingType.VMDK_FILE,
                                           vmdk_file=datastore_path))
    disk = client.vcenter.vm.hardware.Disk.create(vm=vm, spec=disk_create_spec)
    print('vm.hardware.Disk.create({}, {}) -> {}'.format(
        vm, disk_create_spec, disk))
    disks_to_delete.append(disk)
    disk_info = client.vcenter.vm.hardware.Disk.get(vm, disk)
    print('vm.hardware.Disk.get({}, {}) -> {}'.format(vm, disk, pp(disk_info)))

    print('\n# Example: Attach an existing VMDK as a SCSI disk '
          'to a specific bus and specific unit')
    datastore_path = datastore_root_path + '/attach-scsi0:11.vmdk'
    delete_vmdk_if_exist(client, service_instance._stub, datacenter_name,
                         datastore_name, datastore_path)
    create_vmdk(service_instance, datacenter_mo, datastore_path)
    disk_create_spec = Disk.CreateSpec(type=Disk.HostBusAdapterType.SCSI,
                                       scsi=ScsiAddressSpec(bus=0, unit=11),
                                       backing=Disk.BackingSpec(
                                           type=Disk.BackingType.VMDK_FILE,
                                           vmdk_file=datastore_path))
    disk = client.vcenter.vm.hardware.Disk.create(vm=vm, spec=disk_create_spec)
    print('vm.hardware.Disk.create({}, {}) -> {}'.format(
        vm, disk_create_spec, disk))
    disks_to_delete.append(disk)
    disk_info = client.vcenter.vm.hardware.Disk.get(vm, disk)
    print('vm.hardware.Disk.get({}, {}) -> {}'.format(vm, disk, pp(disk_info)))

    # Samples to update operation to change backing
    # Save the disk_info so we can delete the VMDK
    global saved_disk_info
    saved_disk_info = disk_info
    print(
        '\n# Example: Change the backing of the last disk to a new VMDK file.')
    datastore_path = datastore_root_path + '/update-scsi0:11.vmdk'
    delete_vmdk_if_exist(client, service_instance._stub, datacenter_name,
                         datastore_name, datastore_path)
    create_vmdk(service_instance, datacenter_mo, datastore_path)
    disk_update_spec = Disk.UpdateSpec(backing=Disk.BackingSpec(
        type=Disk.BackingType.VMDK_FILE, vmdk_file=datastore_path))
    print('vm.hardware.Disk.update({}, {}, {})'.format(vm, disk,
                                                       disk_update_spec))
    client.vcenter.vm.hardware.Disk.update(vm=vm,
                                           disk=disk,
                                           spec=disk_update_spec)
    disk_info = client.vcenter.vm.hardware.Disk.get(vm, disk)
    print('vm.hardware.Disk.get({}, {}) -> {}'.format(vm, disk, pp(disk_info)))
    def run(self):
        # Get a placement spec
        datacenter_name = 'Datacenter'  # testbed.config['VM_DATACENTER_NAME']
        # vm_folder_name =   'kong111_166'                     #testbed.config['VM_FOLDER2_NAME']
        datastore_name = 'datastore-717'  # testbed.config['VM_DATASTORE_NAME']
        std_portgroup_name = 'VM Network'  # testbed.config['STDPORTGROUP_NAME']
        host = 'host-716'
        diskprovisioningtpye = DiskProvisioningType('eagerZeroedThick')
        if not self.placement_spec:
            # self.placement_spec = vm_placement_helper.get_placement_spec_for_resource_pool(
            #     self.client,
            #     datacenter_name,
            #     vm_folder_name,
            #     datastore_name)
            self.placement_spec = VM.PlacementSpec(host=host,
                                                   datastore=datastore_name,
                                                   folder='group-v3')
        # Get a standard network backing
        standard_network = network_helper.get_network_backing(
            self.client, std_portgroup_name, datacenter_name,
            Network.Type.STANDARD_PORTGROUP)
        """
        Create a basic VM.

        Using the provided PlacementSpec, create a VM with a selected Guest OS
        and provided name.

        Create a VM with the following configuration:
        * Create 2 disks and specify one of them on scsi0:0 since it's the boot disk
        * Specify 1 ethernet adapter using a Standard Portgroup backing
        * Setup for PXE install by selecting network as first boot device

        Use guest and system provided defaults for most configuration settings.
        """
        guest_os = 'CENTOS_6_64'  # testbed.config['VM_GUESTOS']
        hardware = ''
        # boot_disk = Disk.CreateSpec(type=Disk.HostBusAdapterType.SCSI,
        #                             scsi=ScsiAddressSpec(bus=0, unit=0),
        #                             new_vmdk=Disk.VmdkCreateSpec())
        data_disk = Disk.CreateSpec(new_vmdk=Disk.VmdkCreateSpec(
            capacity=self.cap))
        nic = Ethernet.CreateSpec(
            start_connected=True,
            backing=Ethernet.BackingSpec(
                type=Ethernet.BackingType.STANDARD_PORTGROUP,
                network=standard_network))
        sata_adapt = Sata.CreateSpec()
        cpu = Cpu.UpdateSpec(count=self.cpu,
                             cores_per_socket=1,
                             hot_add_enabled=True,
                             hot_remove_enabled=True)
        memory = Memory.UpdateSpec(size_mib=self.memory, hot_add_enabled=True)
        # boot_device_order = [
        #     BootDevice.EntryCreateSpec(BootDevice.Type.ETHERNET),
        #     BootDevice.EntryCreateSpec(BootDevice.Type.DISK)]
        # host1=Host.list()
        # print (host1)
        placement = VM.PlacementSpec(host=host,
                                     datastore=datastore_name,
                                     folder='group-v3')
        vm_create_spec = VM.CreateSpec(name=self.vm_name,
                                       guest_os=guest_os,
                                       cpu=cpu,
                                       memory=memory,
                                       placement=placement,
                                       disks=[data_disk],
                                       nics=[nic],
                                       sata_adapters=[sata_adapt])
        print('\n# Example: create_basic_vm: Creating a VM using spec\n-----')
        print(pp(vm_create_spec))
        print('-----')

        vm = self.client.vcenter.VM.create(vm_create_spec)

        print("create_basic_vm: Created VM '{}' ({})".format(self.vm_name, vm))

        vm_info = self.client.vcenter.VM.get(vm)
        print('vm.get({}) -> {}'.format(vm, pp(vm_info)))
        self.client.vcenter.vm.Power.start(vm)

        return vm