Python-VMWare vSphere(WEB SDK)-SUDS

Python-VMWare vSphere(WEB SDK)-SUDS,python,vmware,suds,Python,Vmware,Suds,如何使用某种形式的库或通过sud与vSphere(或VMWare)表单Python联系,以获取vCPU或特定主机/客户机/虚拟机的数量 目前我正在尝试: from suds.client import Client from suds.sudsobject import Property client = Client("https://<server>/sdk/vimService?wsdl") queryCon = client.wsdl.services[0].ports[0

如何使用某种形式的库或通过sud与vSphere(或VMWare)表单Python联系,以获取vCPU或特定主机/客户机/虚拟机的数量

目前我正在尝试:

from suds.client import Client
from suds.sudsobject import Property

client = Client("https://<server>/sdk/vimService?wsdl")
queryCon = client.wsdl.services[0].ports[0].methods['QueryConnectionInfo']
print queryCon
从suds.client导入客户端
从suds.sudsobject导入属性
客户端=客户端(“https:///sdk/vimService?wsdl")
queryCon=client.wsdl.services[0]。端口[0]。方法['QueryConnectionInfo']
打印查询
这是可行的,它给了我某种形式的输出:

(Method){
   name = "QueryConnectionInfo"
   location = "https://localhost/sdk/vimService"
   binding =
      (binding){
         input = <suds.bindings.document.Document instance at 0x0775C080>
         output = <suds.bindings.document.Document instance at 0x0775C080>
      }
   soap =
      (soap){
         action = ""urn:vim25/4.1""
         style = "document"
         input =
            (Input){
               body =
                  (Body){
                     parts[] =
                        (Part){
                           root = <part name="parameters" element="vim25:QueryConnectionInfo"/>
                           name = "parameters"
                           qname[] =
                              "parameters",
                              "urn:vim25",
                           element = "(u'QueryConnectionInfo', u'urn:vim25')"
                           type = "None"
                        },
                     use = "literal"
                     namespace[] =
                        "vim25",
                        "urn:vim25",
                     wrapped = True
                  }
               headers[] = <empty>
            }
         output =
            (Output){
               body =
                  (Body){
                     parts[] =
                        (Part){
                           root = <part name="parameters" element="vim25:QueryConnectionInfoResponse"/>
                           name = "parameters"
                           qname[] =
                              "parameters",
                              "urn:vim25",
                           element = "(u'QueryConnectionInfoResponse', u'urn:vim25')"
                           type = "None"
                        },
                     use = "literal"
                     namespace[] =
                        "vim25",
                        "urn:vim25",
                     wrapped = True
                  }
               headers[] = <empty>
            }
         faults[] =
            (Fault){
               name = "InvalidLoginFault"
               use = "literal"
               parts[] =
                  (Part){
                     root = <part name="fault" element="vim25:InvalidLoginFault"/>
                     name = "fault"
                     qname[] =
                        "fault",
                        "urn:vim25",
                     element = "(u'InvalidLoginFault', u'urn:vim25')"
                     type = "None"
                  },
            },
            (Fault){
               name = "HostConnectFaultFault"
               use = "literal"
               parts[] =
                  (Part){
                     root = <part name="fault" element="vim25:HostConnectFaultFault"/>
                     name = "fault"
                     qname[] =
                        "fault",
                        "urn:vim25",
                     element = "(u'HostConnectFaultFault', u'urn:vim25')"
                     type = "None"
                  },
            },
            (Fault){
               name = "RuntimeFault"
               use = "literal"
               parts[] =
                  (Part){
                     root = <part name="fault" element="vim25:RuntimeFaultFault"/>
                     name = "fault"
                     qname[] =
                        "fault",
                        "urn:vim25",
                     element = "(u'RuntimeFaultFault', u'urn:vim25')"
                     type = "None"
                  },
            },
      }
 }
(方法){
name=“QueryConnectionInfo”
位置=”https://localhost/sdk/vimService"
装订=
(有约束力){
输入=
输出=
}
肥皂=
(肥皂){
动作=“urn:vim25/4.1”
style=“文档”
输入=
(输入){
身体=
(正文){
第[]部分=
(部分){
根=
name=“参数”
qname[]=
“参数”,
“urn:vim25”,
element=“(u'QueryConnectionInfo',u'urn:vim25')”
type=“无”
},
use=“literal”
名称空间[]=
“vim25”,
“urn:vim25”,
包装=真
}
标题[]=
}
输出=
(产出){
身体=
(正文){
第[]部分=
(部分){
根=
name=“参数”
qname[]=
“参数”,
“urn:vim25”,
element=“(u'QueryConnectionInfoResponse',u'urn:vim25')”
type=“无”
},
use=“literal”
名称空间[]=
“vim25”,
“urn:vim25”,
包装=真
}
标题[]=
}
故障[]=
(故障){
name=“InvalidLoginFault”
use=“literal”
第[]部分=
(部分){
根=
name=“故障”
qname[]=
“过失”,
“urn:vim25”,
element=“(u'InvalidLoginFault',u'urn:vim25')”
type=“无”
},
},
(故障){
name=“HostConnectFaultFault”
use=“literal”
第[]部分=
(部分){
根=
name=“故障”
qname[]=
“过失”,
“urn:vim25”,
element=“(u'HostConnectFaultFault',u'urn:vim25')”
type=“无”
},
},
(故障){
name=“RuntimeFault”
use=“literal”
第[]部分=
(部分){
根=
name=“故障”
qname[]=
“过失”,
“urn:vim25”,
element=“(u'RuntimeFaultFault',u'urn:vim25')”
type=“无”
},
},
}
}
我试着遵循以下“指南”:

我知道所有的信息可能都在这里,我只是看不到整个画面:/

经过一段时间的尝试,这就是我被卡住的地方:

client = Client("https://<server>/sdk/vimService?wsdl")
#queryCon = client.wsdl.services[0].ports[0].methods['QueryConnectionInfo']
print client.service.QueryConnectionInfo("https://<server>/sdk", None, r'domain\user', 'Password')
client=client(“https:///sdk/vimService?wsdl")
#queryCon=client.wsdl.services[0]。端口[0]。方法['QueryConnectionInfo']
打印client.service.QueryConnectionInfo(“https:///sdk,无,r'domain\user',Password')
输出为:

urllib2.URLError: <urlopen error [Errno 1] _ssl.c:490: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol>
urllib2.URLError:
您可能需要尝试一个Python库(基于SUD),它将允许您访问整个vSphere Web Services SDK

安装它:

$ pip install psphere
查找虚拟机并打印其拥有的CPU数量:

>>> from psphere.client import Client
>>> from psphere.managedobjects import VirtualMachine
>>> client = Client(server="vcenter.mydomain.com", username="Administrator", password="strong")
>>> vm = VirtualMachine.get(client, name="genesis")
>>> vm
<psphere.managedobjects.VirtualMachine object at 0xd3fbccc>
>>> print("%s has %s CPUs" % (vm.name, vm.config.hardware.numCPU))
genesis has 2 CPUs
>>从psphere.client导入客户端
>>>从psphere.managedobjects导入虚拟机
>>>client=client(server=“vcenter.mydomain.com”、username=“Administrator”、password=“strong”)
>>>vm=VirtualMachine.get(客户端,name=“genesis”)
>>>虚拟机
>>>打印(“%s有%s个CPU”%(vm.name、vm.config.hardware.numpu))
genesis有2个CPU
您可以在中找到更多示例


免责声明:我是psphere的作者。

用一个新的库:pysphere解决了这个问题 (轻松安装pysphere)


它保持了vSphere变量的名称空间的完整性,并且它是我所需要的透明的,这意味着它不会改变任何易于查找的内容,它还支持批处理信息,因此我不必在一个缓慢而痛苦的过程中逐个查询所有1500台服务器,收集有关任何主机的信息需要几秒钟。

服务器似乎不理解ssl。你尝试过普通的http请求吗?很抱歉,我的回答太晚了,我从来没有让psphere正常工作过,我记不起这个问题,但可能能够重现它。你还在使用这个pysphere吗?除了虚拟机操作之外,你还使用它吗?我经常围绕KVM tho开发我自己的包装器,所以我已经停止使用专有软件了:)
from pysphere import VIServer
server = VIServer()
server.connect("server", 'user', "pass")
vm = server.get_vm_by_name("virtual_host_name")
info = vm.get_properties()