2016-10-26 3 views
0

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

Antwort

0

Sieht aus wie ein Fehler in der Dokumentation. Die Methode heißt Relocate (und nicht RelocateVM).

Hinweis, BTW, dass in Ihrer ersten Probe Sie den Zielhost nicht an den Anruf an Relocate übergeben, so dass etwas dort definitiv fehlt.

Sie können einige Proben unter https://gist.github.com/rgerganov/12fdd2ded8d80f36230f oder unter https://github.com/sijis/pyvmomi-examples/blob/master/migrate-vm.py sehen.

Schließlich, eine Möglichkeit zu realisieren, dass Sie den falschen Namen verwenden, ist Pythons dir Methode auf einem VirtualMachine-Objekt aufrufen. Dadurch werden alle Eigenschaften des Objekts aufzulisten, so dass Sie, welche Methoden sehen es hat:

>>> vm = vim.VirtualMachine('vm-1234', None) 
>>> dir(vm) 
['AcquireMksTicket', [...] 'Relocate', 'RelocateVM_Task', [...] ] 

(abgekürzt Ausgabe)

+0

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

+0

@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

+0

Eigentlich funktioniert es jetzt, ich hatte einen Tippfehler. Ich habe spec.host = host obj. Danke vielmals – jramacha

Verwandte Themen