如何使用pyvmomi删除虚拟磁盘

时间:2019-09-11 00:27:54

标签: python vmware esxi pyvmomi

我正在尝试使用pyvmomi库编写Python程序来“擦除”与VM关联的虚拟硬盘驱动器。手动完成此操作的方法是删除虚拟磁盘并创建具有相同规格的新虚拟磁盘。我期望我需要对pyvmomi做同样的事情,所以我已经开始了这条路。我的问题是我可以使用ReconfigVM_Task删除虚拟驱动器,但是会留下VMDK文件本身。

我最初尝试使用DeleteVStorageObject_Task(因为不推荐使用DeleteVirtualDisk_Task)来删除虚拟磁盘文件,但这需要对象ID(VMDK文件),而我在任何地方都找不到。从理论上讲,可以从VirtualDisk属性vDiskId获得,但它为null。在进一步的研究中,似乎只填充了一流的磁盘。

因此,我改为尝试直接使用DeleteDatastoreFile_Task删除VMDK文件,但是当我这样做时,最终在数据存储区中看到一个XXXX-flat.vmdk文件,因此它似乎实际上并未删除该文件。

关于我在哪里出错或如何更好地做到这一点的任何想法? pyvmomi的VMWare SDK文档缺少...。

谢谢!

2 个答案:

答案 0 :(得分:0)

您将必须执行ReconfigVM_Task操作。这样做的关键是应该销毁文件操作。这是在UI中执行操作的原始输出:

["src", "test"]

答案 1 :(得分:0)

Kyle Ruddy让我指出了正确的方向。这是一个代码片段,显示了我如何使它适合将来的人们搜索有关如何执行此操作的信息:

#Assuming dev is already set to the vim.vm.device.VirtualDisk you want to delete...
virtual_hdd_spec = vim.vm.device.VirtualDeviceSpec()
virtual_hdd_spec.fileOperation = vim.vm.device.VirtualDeviceSpec.FileOperation.destroy
virtual_hdd_spec.operation = vim.vm.device.VirtualDeviceSpec.Operation.remove
virtual_hdd_spec.device = dev
spec = vim.vm.ConfigSpec()
spec.deviceChange = [virtual_hdd_spec]
WaitForTask(vm.ReconfigVM_Task(spec=spec))

有关此问题的API文档位于https://pubs.vmware.com/vi3/sdk/ReferenceGuide/vim.vm.device.VirtualDeviceSpec.html