2016-04-05 3 views
1

Я пытаюсь развернуть ovf с помощью pyVmomi. Я пытаюсь следовать этому примеру: https://github.com/vmware/pyvmomi-community-samples/blob/master/samples/deploy_ovf.py.pyVmomi exception on manager.CreateImportSpec

Есть две установки VCenter и есть различия. В одном VCenter я могу развернуть виртуальную машину. С другой стороны, у меня есть неисправность, как показано ниже:

>>> spec_result = manager.CreateImportSpec(ovfd, rp_obj, datastore_obj,spec_params) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Users/aitang/virenvs/py343/lib/python3.4/site-packages/pyVmomi/VmomiSupport.py", line 570, in <lambda> 
    self.f(*(self.args + (obj,) + args), **kwargs) 
    File "/Users/aitang/virenvs/py343/lib/python3.4/site-packages/pyVmomi/VmomiSupport.py", line 376, in _InvokeMethod 
    return self._stub.InvokeMethod(self, info, args) 
    File "/Users/aitang/virenvs/py343/lib/python3.4/site-packages/pyVmomi/SoapAdapter.py", line 1350, in InvokeMethod 
    raise obj # pylint: disable-msg=E0702 
pyVmomi.VmomiSupport.InvalidType: (vmodl.fault.InvalidType) { 
    dynamicType = <unset>, 
    dynamicProperty = (vmodl.DynamicProperty) [], 
    msg = '', 
    faultCause = <unset>, 
    faultMessage = (vmodl.LocalizableMessage) [], 
    argument = 'ManagedObjectReference' 
} 

Может кто-то точка на пути о том, как я могу устранить эту ошибку? Я попытался посмотреть, что делает эта функция, но не может ее найти.

Я попытался установить трассировку pdb, и выясняется, что причина, по которой он терпит неудачу, заключается в том, что это возвращается с ответом 500. В VCenter, который работал, он возвращает ответ 200. Итак, почему один и тот же вызов будет возвращаться по-другому?

ответ

0

Я использовал неправильное хранилище данных. Один я не был типа «Datastore»:

>>> type(datastore_obj) 
<class 'pyVmomi.VmomiSupport.vim.StoragePod'> 

Когда я использовал один из своих childEntity, он работал:

>>> type(datastore_obj.childEntity[0]) 
<class 'pyVmomi.VmomiSupport.vim.Datastore'> 

Вот что помогло при отладке: я поставил точку останова в SoapAdapter .py. Когда 500 возвращаются ко мне, он вошел PDB, и я получил свой собственный запрос, который содержал эту строку в нижней части:

<datastore type="StoragePod">datastore-1</datastore> 

Когда я сравнил это с другим VCENTER, который работал, я видел эту разницу:

<datastore type="Datastore">datastore-10</datastore>