Question

I am querying ESX hosts, some of which are managed by a vCenter server, and some are not. I want to find out the name of the vCenter server that manages this host, if it there is one.

I'm using the Python psphere module, but all I want is the types of objects and attributes I should be looking in. This is the relevant excerpt from my code:

from psphere.client import Client
import psphere.managedobjects

items = []

cl = Client( hostname, userid, password )
dcs = psphere.managedobjects.Datacenter.all( cl )

I identify an ESX host vs. a vCenter server by checking the datacenters list:

if len( dcs ) == 1 and dcs[0].name == 'ha-datacenter':
    hosts = psphere.managedobjects.HostSystem.all( cl )

Typically, hosts above will be a list of one element: the ESX host. I want to know how to find out if there is a managing ESX server for this host. The vSphere client does it, so there must be a way.

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() is my own function for collecting details about hosts and vCenter servers.

Was it helpful?

Solution

I found the following property within the HostSystem object: .summary.managementServerIp. Not all HostSystem objects will have this property, so I check for it as follows:

host = ... a HostSystem object, acquired as described in the question ...
if 'managementServerIp' in host.summary:
    ... do something with the management server IP address ...

OTHER TIPS

That data field (managementServerIp) is not always populated. A better property to get the vcenter information is ServiceUrl (.extensiondata.Client.ServiceUrl) from get-vmhost cmdlet. Also there is no need to do a reverse lookup on the IP to get the name.

Just need to parse the URL to get the name of the vCenter server. This regex (using -replace) does the job:

'http[s|]://([^:]*):.*$', '$1'
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top