首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用pyvmomi删除虚拟磁盘

如何使用pyvmomi删除虚拟磁盘
EN

Stack Overflow用户
提问于 2019-09-11 08:27:55
回答 2查看 776关注 0票数 0

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

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

因此,我尝试直接使用DeleteDatastoreFile_Task删除VMDK文件,但当我这样做时,我在数据存储中得到了一个XXXX-flat.vmdk文件,因此它似乎并没有实际删除该文件。

你知道我在哪里做错了吗?或者如何做得更好?pyvmomi is...lacking的VMWare开发工具包文档。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-01 01:54:43

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

代码语言:javascript
复制
spec = vim.vm.ConfigSpec()
spec_deviceChange_0 = vim.vm.device.VirtualDeviceSpec()
spec_deviceChange_0.fileOperation = 'destroy'
spec_deviceChange_0.device = vim.vm.device.VirtualDisk()
spec_deviceChange_0.device.shares = vim.SharesInfo()
spec_deviceChange_0.device.shares.shares = 1000
spec_deviceChange_0.device.shares.level = 'normal'
spec_deviceChange_0.device.capacityInBytes = 8589934592
spec_deviceChange_0.device.storageIOAllocation = vim.StorageResourceManager.IOAllocationInfo()
spec_deviceChange_0.device.storageIOAllocation.shares = vim.SharesInfo()
spec_deviceChange_0.device.storageIOAllocation.shares.shares = 1000
spec_deviceChange_0.device.storageIOAllocation.shares.level = 'normal'
spec_deviceChange_0.device.storageIOAllocation.limit = -1
spec_deviceChange_0.device.storageIOAllocation.reservation = 0
spec_deviceChange_0.device.backing = vim.vm.device.VirtualDisk.FlatVer2BackingInfo()
spec_deviceChange_0.device.backing.backingObjectId = ''
spec_deviceChange_0.device.backing.fileName = '[kruddy_2TB_01] web01/web01_2.vmdk'
spec_deviceChange_0.device.backing.split = False
spec_deviceChange_0.device.backing.writeThrough = False
spec_deviceChange_0.device.backing.datastore = search_index.FindByUuid(None, "datastore-14", True, True)
spec_deviceChange_0.device.backing.eagerlyScrub = True
spec_deviceChange_0.device.backing.contentId = 'e26f44020e7897006bec81b1fffffffe'
spec_deviceChange_0.device.backing.thinProvisioned = False
spec_deviceChange_0.device.backing.diskMode = 'persistent'
spec_deviceChange_0.device.backing.digestEnabled = False
spec_deviceChange_0.device.backing.sharing = 'sharingNone'
spec_deviceChange_0.device.backing.uuid = '6000C292-7895-54ee-a55c-49d0036ef1bb'
spec_deviceChange_0.device.controllerKey = 200
spec_deviceChange_0.device.unitNumber = 0
spec_deviceChange_0.device.nativeUnmanagedLinkedClone = False
spec_deviceChange_0.device.capacityInKB = 8388608
spec_deviceChange_0.device.deviceInfo = vim.Description()
spec_deviceChange_0.device.deviceInfo.summary = '8,388,608 KB'
spec_deviceChange_0.device.deviceInfo.label = 'Hard disk 2'
spec_deviceChange_0.device.diskObjectId = '148-3000'
spec_deviceChange_0.device.key = 3000
spec_deviceChange_0.operation = 'remove'
spec.deviceChange = [spec_deviceChange_0]
spec.cpuFeatureMask = []
managedObject.ReconfigVM_Task(spec)  
票数 0
EN

Stack Overflow用户

发布于 2019-10-01 07:01:28

凯尔·鲁迪让我找到了正确的方向。这是一个代码片段,展示了我是如何让它工作的,供搜索如何做到这一点的信息的未来人们使用:

代码语言:javascript
复制
#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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57879626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档