Vmware 如何从HostSystem对象确定vCenter Server?

Vmware 如何从HostSystem对象确定vCenter Server?,vmware,vsphere,esx,Vmware,Vsphere,Esx,我正在查询ESX主机,其中有些由vCenter服务器管理,有些则不是。我想找出管理此主机的vCenter服务器的名称(如果有) 我正在使用PythonPSphere模块,但我想要的只是我应该查看的对象和属性的类型。这是我的代码的相关摘录: from psphere.client import Client import psphere.managedobjects items = [] cl = Client( hostname, userid, password ) dcs = psphe

我正在查询ESX主机,其中有些由vCenter服务器管理,有些则不是。我想找出管理此主机的vCenter服务器的名称(如果有)

我正在使用PythonPSphere模块,但我想要的只是我应该查看的对象和属性的类型。这是我的代码的相关摘录:

from psphere.client import Client
import psphere.managedobjects

items = []

cl = Client( hostname, userid, password )
dcs = psphere.managedobjects.Datacenter.all( cl )
我通过检查数据中心列表来确定ESX主机与vCenter服务器:

if len( dcs ) == 1 and dcs[0].name == 'ha-datacenter':
    hosts = psphere.managedobjects.HostSystem.all( cl )
通常,上面的主机是一个元素列表:ESX主机。我想知道如何确定此主机是否有管理ESX server。vSphere客户端可以做到这一点,因此必须有一种方法

else:   #  This is a vCenter server, so we can drill down to find the ESX servers
    for dc in dcs:
        items.extend( getEntities( dc, [hostname] ) )

getEntities()是我自己的函数,用于收集主机和vCenter服务器的详细信息。

我在
HostSystem
对象中找到了以下属性:
.summary.managementServerIp
。并非所有
HostSystem
对象都具有此属性,因此我按如下方式检查它:

host = ... a HostSystem object, acquired as described in the question ...
if 'managementServerIp' in host.summary:
    ... do something with the management server IP address ...
该数据字段(managementServerIp)并不总是填充。从get-vmhost cmdlet获取vcenter信息的更好属性是ServiceUrl(.extensiondata.Client.ServiceUrl)。此外,不需要在IP上进行反向查找来获取名称

只需解析URL即可获得vCenter服务器的名称。此正则表达式(使用-replace)执行以下任务:

'http[s|]://([^:]*):.*$', '$1'