2

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

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

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 服务器。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 服务器的详细信息。

4

2 回答 2

1

我在对象中找到了以下属性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 ...
于 2013-10-21T20:16:39.640 回答
1

该数据字段 (managementServerIp) 并不总是填充。获取 vCenter 信息的更好属性是来自 get-vmhost cmdlet 的 ServiceUrl (.extensiondata.Client.ServiceUrl)。此外,无需对 IP 进行反向查找即可获取名称。

只需解析 URL 即可获取 vCenter 服务器的名称。这个正则表达式(使用 -replace)完成了这项工作:

'http[s|]://([^:]*):.*$', '$1'
于 2015-06-17T22:57:37.373 回答