Creating VM using vim.vm.ConfigSpec, adding SCSI, SATA controller through VirtualDeviceSpec, SCSI and Disk are able to get created, but AHCI controller and CDRom could not be added.
Following is the script, can anybody help to share some experience. Thanks in advance.
devices = []
nicspec = vim.vm.device.VirtualDeviceSpec()
nicspec.operation = vim.vm.device.VirtualDeviceSpec.Operation.add
nicspec.device = vim.vm.device.VirtualVmxnet3()
nicspec.device.deviceInfo = vim.Description()
nicspec.device.backing = vim.vm.device.VirtualEthernetCard.NetworkBackingInfo()
nicspec.device.backing.network = get_obj(si, [vim.Network], net_name)
nicspec.device.backing.deviceName = net_name
nicspec.device.connectable = vim.vm.device.VirtualDevice.ConnectInfo()
nicspec.device.connectable.startConnected = True
nicspec.device.connectable.allowGuestControl = True
devices.append(nicspec)
scsi_ctr = vim.vm.device.VirtualDeviceSpec()
scsi_ctr.operation = vim.vm.device.VirtualDeviceSpec.Operation.add
scsi_ctr.device = vim.vm.device.VirtualLsiLogicSASController()
scsi_ctr.device.busNumber = 1
scsi_ctr.device.hotAddRemove = True
scsi_ctr.device.sharedBus = 'noSharing'
scsi_ctr.device.scsiCtlrUnitNumber = 7
scsi_ctr.device.key = 555
devices.append(scsi_ctr)
unit_number = 0
new_disk_kb = 30 * 1024 * 1024
controller = scsi_ctr.device
disk_spec = vim.vm.device.VirtualDeviceSpec()
disk_spec.fileOperation = "create"
disk_spec.operation = vim.vm.device.VirtualDeviceSpec.Operation.add
disk_spec.device = vim.vm.device.VirtualDisk()
disk_spec.device.backing = vim.vm.device.VirtualDisk.FlatVer2BackingInfo()
disk_spec.device.backing.diskMode = 'persistent'
disk_spec.device.unitNumber = unit_number
disk_spec.device.capacityInKB = new_disk_kb
disk_spec.device.controllerKey = controller.key
devices.append(disk_spec)
sata_spec = vim.vm.device.VirtualDeviceSpec()
sata_spec.device = vim.vm.device.VirtualAHCIController()
sata_spec.operation = vim.vm.device.VirtualDeviceSpec.Operation.add
sata_spec.device.key = -15050
sata_spec.device.controllerKey = 100
sata_spec.device.busNumber = 2
sata_spec.device.deviceInfo = vim.Description()
sata_spec.device.deviceInfo.label = "adapter"
sata_spec.device.deviceInfo.summary = "adapter"
devices.append(sata_spec)
deviceSpec = vim.vm.device.VirtualDeviceSpec()
backing = vim.vm.device.VirtualCdrom.IsoBackingInfo()
backing.fileName = "[n0506-datastore1] isofiles/FreeNAS-11.2-U2.1.iso"
backing.datastore = get_obj(si, [vim.Datastore], "n0506-datastore1")
cdrom = vim.vm.device.VirtualCdrom()
connectable = vim.vm.device.VirtualDevice.ConnectInfo()
connectable.connected = True
connectable.allowGuestControl = True
connectable.startConnected = True
cdrom.connectable = connectable
cdrom.controllerKey = sata_spec.device.key
cdrom.key = -1
cdrom.backing = backing
deviceSpec.device = cdrom
devices.append(deviceSpec)
config = vim.vm.ConfigSpec(name=vm_name,
memoryMB=16384,
numCPUs=16,
files=vmx_file,
guestId='freebsd64Guest',
version='vmx-14',
deviceChange=devices)