I am trying to add a disk to an existing VM.
if vm: for cluster in ds_cluster: print cluster.name spec = vim.vm.ConfigSpec() # get all disks on a VM, set unit_number to the next available for dev in vm.config.hardware.device: if hasattr(dev.backing, 'fileName'): unit_number = int(dev.unitNumber) + 1 # unit_number 7 reserved for scsi controller if unit_number == 7: unit_number += 1 if unit_number >= 16: print "we don't support this many disks" return if isinstance(dev, vim.vm.device.VirtualSCSIController): controller = dev # add disk here dev_changes = [] new_disk_kb = INSTANCE_TYPE['standard']['diskSize'] * 1024 * 1024 #int(args.disksize) * 1024 * 1024 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.datastore = datastore disk_spec.device.backing.thinProvisioned = True 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 dev_changes.append(disk_spec) spec.deviceChange = dev_changes spec.name = vm.summary.config.name podsel = vim.storageDrs.PodSelectionSpec() podsel.storagePod = cluster vmpodconfig = vim.storageDrs.PodSelectionSpec.VmPodConfig() vmpodconfig.storagePod = cluster disklocator=vim.storageDrs.PodSelectionSpec.DiskLocator() disklocator.diskId = unit_number disklocator.diskBackingInfo = disk_spec.device.backing vmconfiginfo = vim.storageDrs.VmConfigInfo() vmconfiginfo.vm = vm vmconfiginfo.enabled = True vmpodconfig.vmConfig = vmconfiginfo vmpodconfig.disk.append(disklocator) podsel.initialVmConfig.append(vmpodconfig) storagespec = vim.storageDrs.StoragePlacementSpec() storagespec.podSelectionSpec = podsel storagespec.vm = vm storagespec.type = 'reconfigure' storagespec.folder = datacenter.vmFolder storagespec.configSpec = spec storagespec.resourcePool = resource_pool print storagespec rec = content.storageResourceManager.RecommendDatastores(storageSpec=storagespec) rec_key = rec.recommendations[0].key print rec_key #task = content.storageResourceManager.ApplyStorageDrsRecommendation_Task(rec_key) #wait_for_task(task, 'Applying Disk Recommendations') #task = vm.ReconfigVM_Task(spec=spec) #wait_for_task(task,"Adding disk") print "%sGB disk added to %s" % ('4', vm.config.name) #reboot(vm,content,args)else: print 'VM not found'
I keep getting the error:
Caught vmodl fault : A specified parameter was not correct: StoragePlacementSpec.podSelectionSpec and configSpec
Any idea what i am missing?
The documentation here https://github.com/vmware/pyvmomi/blob/master/docs/vim/StorageResourceManager.rst#recommendDatastores
seems confusing.