背景:
在一个项目中,我需要使用reconfigVM_task
删除一个虚拟机的所有虚拟磁盘,然后,我需要继续运行第二个reconfigVM_task
,它使用其他配置文件向该虚拟机添加多个虚拟磁盘。
问题:
第一个任务(删除vm的所有虚拟磁盘)工作正常,但之后第二个任务(添加多个虚拟磁盘失败)。VCENTER保持显示"Cannot complete operation, becuase the file or folder [xxxdatastore] vmName/virtualDiskName.vmdk is already exists"
。
我已经检查过,显示虚拟磁盘的vcenterURL
/文件夹已经被删除。如果我手动刷新vsphere web客户端,然后重新添加virtualDisk,它就可以工作了。
问题:
-
有人知道如何解决
"Add virtualDisks but has error 'Cannot complete operation because xxx.vmdk already exist"
问题吗? -
或者有人知道如何使用
vijava
api刷新数据存储使删除能够识别吗?
我过去也遇到过类似的问题,没有将.waitForTask()
放在函数调用的末尾。
如果你这样做,你不应该得到任何VMDK已经存在的错误
BTW,您可以在单个reconfigVM_task
操作中删除所有磁盘并添加新磁盘。只需确保您的VirtualDeviceConfigSpecOperation.remove
操作在VirtualDeviceConfigSpec[]
中处于第一位
通过集中每个操作解决了这个问题。例如,我需要检查当前的VM1
和VM2
,VM1
需要删除2个设备并添加1个新设备,VM2
需要删除1个设备然后添加1个设备。
在我收集VM1
和VM2
的所有删除操作之前,首先收集VM1和VM2
的添加操作以重新配置VM_Task的VirtualDeviceCOnfigSpec[]
。我仔细检查了所有virtualDeviceCOnfigSpec
设置是否正确,并且确实有waitForTask
和vmware论坛上提到的其他类似问题。
最后,通过先做VM1
delete-reconfig
,再做VM2
add-reconfig
来解决这个问题。VM2也是如此。这一次,它适用于我的项目。但它失败的真正原因我不太清楚。