Hallo Ich benutze pyvmomi API, um vmotions gegen einen Cluster durchzuführen, wenn DRS auf manuellen Modus eingestellt ist. Ich gehe durch ein vcenter und frage einen Cluster ab, bekomme eine Empfehlung und benutze diese, um die Vmotions durchzuführen. Der Code ist in etwa so.pyvmomi: Fehler beim Aufruf von RelocateVM
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')
Ich bekomme eine Fehlermeldung, dass das Attribut nicht existiert. Attribute: 'vim.VirtualMachine' Objekt hat kein Attribut 'RelocateVM'
Aber die pyvmomi documentaion hier https://github.com/vmware/pyvmomi/blob/master/docs/vim/VirtualMachine.rst hat eine detaillierte Erklärung für das Verfahren RelocateVM (spec, Priorität):
Wer weiß, was der Grund ist die Methode fehlt? Ich habe auch versucht die zur Verfügung stehenden Methoden des Objekts überprüft, die RelocateVM_Task hat, statt RelocateVM (für die konnte ich nicht finden Dokumentation) Als ich noch, dass ich diesen Fehler
TypeError: For "spec" expected type vim.vm.RelocateSpec, but got str
ich die Dokumentation für vim geprüft. vm.RelocateSpec, ich rufe es in einer Funktion auf, aber wirft immer noch einen Fehler.
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)
Jede Hilfe wird geschätzt. Danke
Ich erhalte eine Fehlermeldung, wenn ich den Umzug/RelocateVM_Task nennen, irgendwelche Ideen? Ich habe die Spezifikation mit dem Host festgelegt. Aber es wirft diesen Fehler auf. pyVmomi.VmomiSupport.ManagedObjectNotFound: (vmodl.fault.ManagedObjectNotFound) { dynamicType =, dynamicProperty = (vmodl.DynamicProperty) [], msg = '', Fehlerursachen = , faultMessage = (vmodl.LocalizableMessage) [], obj = 'vim.VirtualMachine: xxxx' } –
jramacha
@jramacha Können Sie Ihren aktualisierten Code in der Frage posten? Beachten Sie, dass Sie ein neues 'vim.vm.RelocateSpec'-Objekt erstellen müssen (Sie können' spec = host' nicht übergeben). Siehe das Beispiel unter https://github.com/sijis/pyvmomi-examples/blob/master/migrate-vm.py. – YSK
Eigentlich funktioniert es jetzt, ich hatte einen Tippfehler. Ich habe spec.host = host obj. Danke vielmals – jramacha