Python - VMWare vSphere (WEB SDK) - SUDS - PullRequest
       13

Python - VMWare vSphere (WEB SDK) - SUDS

4 голосов
/ 25 октября 2011

Как мне связаться с формой vSphere (или VMWare) Python, используя библиотеку какой-либо формы или через SUDS, чтобы получить номер номера 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

И это работает, и это дает мне некоторую форму вывода:

(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"
                  },
            },
      }
 }

Я пробовал следовать следующим "руководствам":

SUDS - программный доступ к методам и типам

http://www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/vim.VirtualMachine.html#field_detail

http://communities.vmware.com/thread/273616

Я знаю, что вся информация, вероятно, здесь, я просто не могу видеть всю картинку: /

Через некоторое время попыток вот где я застрял:

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

И вывод:

urllib2.URLError: <urlopen error [Errno 1] _ssl.c:490: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol>

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

Решено с помощью новой библиотеки: pysphere (easy_install pysphere)

from pysphere import VIServer
server = VIServer()
server.connect("server", 'user', "pass")
vm = server.get_vm_by_name("virtual_host_name")
info = vm.get_properties()

Оно сохраняет пространство имен нетронутым для переменных vSphere и настолько прозрачно, насколько мне нужно, то есть оно не меняетсявсе, что облегчает поиск, также поддерживает пакетирование информации, поэтому мне не нужно запрашивать все 1500 серверов один за другим в медленном и мучительном процессе, сбор информации о любом хосте занимает несколько секунд.

2 голосов
/ 29 октября 2011

Возможно, вы захотите попробовать psphere , библиотеку Python (на основе suds), которая предоставит вам доступ ко всему пакету vSphere Web Services SDK.

Установите его:

$ pip install psphere

Найдите виртуальную машину и напечатайте количество имеющихся у нее процессоров:

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

...