Привет, я использую pyvmomi API для выполнения vmotions против кластера, когда DRS установлен в ручной режим. Я просматриваю vcenter и запрашиваю кластер, получаю рекомендации и использую их для выполнения Vmotions. Код примерно такой.
content=getVCContent(thisHost, {'user':username,'pwd':decoded_password},logger)
allClusterObj = content.viewManager.CreateContainerView(content.rootFolder, [pyVmomi.vim.ClusterComputeResource], True)
allCluster = allClusterObj.view
for thisDrsRecommendation in thisCluster.drsRecommendation:
print thisDrsRecommendation.reason
for thisMigration in thisDrsRecommendation.migrationList:
print ' vm:', thisMigration.vm.name
while True:
relocate_vm_to_host(thisMigration.vm.name,thisMigration.destination.name, allClusterObj.view)
#FUNCTION definition
def relocate_vm_to_host(vm, host , allCluster):
for thisCluster in allCluster:
for thisHost in thisCluster.host:
if thisHost.name == host:
for thisVm in thisHost.vm:
print 'Relocating vm:%s to host:%s on cluster:%s' %(thisVm.name,thisHost.name,thisCluster.name)
task = thisVm.RelocateVM(priority='defaultpriority')
Я получаю сообщение об ошибке, что атрибут не существует. AttributeError: объект «vim.VirtualMachine» не имеет атрибута «RelocateVM»
Но документация pyvmomi здесь https://github.com/vmware/pyvmomi/blob/master/docs/vim/VirtualMachine.rst содержит подробное объяснение метода RelocateVM(spec, priority):
Кто-нибудь знает, в чем причина отсутствия метода? Я также попытался проверить доступные методы объекта, у которого есть RelocateVM_Task, вместо RelocateVM (для которого я не смог найти документацию). Когда я использовал это, я получаю эту ошибку
TypeError: For "spec" expected type vim.vm.RelocateSpec, but got str
Я проверил документацию для vim.vm.RelocateSpec, я вызываю его в функции, но все равно выдает ошибку.
def relocate_vm(VmToRelocate,destination_host,content):
allvmObj = content.viewManager.CreateContainerView(content.rootFolder, [pyVmomi.vim.VirtualMachine], True)
allvms = allvmObj.view
for vm in allvms:
if vm.name == VmToRelocate:
print 'vm:%s to relocate %s' %(vm.name , VmToRelocate)
task = vm.RelocateVM_Task(spec = destination_host)
Любая помощь приветствуется. Спасибо