2011-10-25 10 views
4

vSphere(またはVMWare)フォームのPythonにライブラリの形式かSUDSを使用して接続すると、vCPUの数または特定のホスト/ゲスト/仮想の数を取得できます-機械?Python - VMWare vSphere(WEB SDK) - SUDS

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 - programmatic access to methods and types

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

サーバがsslを認識していないようです。プレーンなhttpリクエストを試しましたか? – jfs

答えて

2

あなたはをしようとする場合がありますは、vSphere Web Services SDK全体にアクセスするためのPythonライブラリ(sudsベース)です。

$ 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 

あなたがdocumentationでより多くの例を見つけることができます。

免責事項:私はpsphereの著者です。

+0

遅くて申し訳ありませんが、私はpsphereを正しく動作させることはできませんでした。問題を覚えていないかもしれませんが、再現できるかもしれません。 – Torxed

2

は新しいライブラリでそれを解決: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サーバーを1つずつゆっくりと苦しいプロセスでクエリする必要はありませんので、任意のホストに関する情報を収集する数秒かかる情報をバッチをサポートしています。

+0

まだこの球体を使っていますか?あなたはVMの操作以外のもののためにそれを使用しますか? – Litty

+0

時々、私はKVM thoの周りに独自のラッパーを開発していますので、私は独占的なソフトウェアを使用してすべてのtogeatherを停止しました:) – Torxed

関連する問題