2016-04-05 33 views
1

我想用pyVmomi部署ovf。我试图按照这个例子:https://github.com/vmware/pyvmomi-community-samples/blob/master/samples/deploy_ovf.py在manager.CreateImportSpec的pyVmomi异常

有两个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

我使用了错误的数据存储。我使用的是类型“数据存储”没有:当我用它childEntity之一

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

,它的工作:

>>> 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>