Implement the .domainGetHostname hypervisor driver API to get the hostname of a running guest (needs VMware Tools). Signed-off-by: Pino Toscano <ptoscano@xxxxxxxxxx> --- docs/drvesx.html.in | 3 +++ src/esx/esx_driver.c | 54 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/docs/drvesx.html.in b/docs/drvesx.html.in index e25cf07e92..38de640c2a 100644 --- a/docs/drvesx.html.in +++ b/docs/drvesx.html.in @@ -796,6 +796,9 @@ Enter administrator password for example-vcenter.com: performed the ESX server raises an error and the driver reports it. </p> <ul> + <li> + <code>virDomainGetHostname</code> + </li> <li> <code>virDomainReboot</code> </li> diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index 9080478435..bddc588977 100644 --- a/src/esx/esx_driver.c +++ b/src/esx/esx_driver.c @@ -5060,6 +5060,59 @@ esxDomainHasManagedSaveImage(virDomainPtr domain, unsigned int flags) } +static char * +esxDomainGetHostname(virDomainPtr domain, + unsigned int flags) +{ + esxPrivate *priv = domain->conn->privateData; + esxVI_String *propertyNameList = NULL; + esxVI_ObjectContent *virtualMachine = NULL; + esxVI_VirtualMachinePowerState powerState; + char *hostname = NULL; + char *new_hostname = NULL; + + virCheckFlags(0, NULL); + + if (esxVI_EnsureSession(priv->primary) < 0) + return NULL; + + if (esxVI_String_AppendValueListToList(&propertyNameList, + "runtime.powerState\0" + "guest.hostName") < 0 || + esxVI_LookupVirtualMachineByUuid(priv->primary, domain->uuid, + propertyNameList, &virtualMachine, + esxVI_Occurrence_OptionalItem) || + esxVI_GetVirtualMachinePowerState(virtualMachine, &powerState) < 0) { + goto cleanup; + } + + if (powerState != esxVI_VirtualMachinePowerState_PoweredOn) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("Domain is not powered on")); + goto cleanup; + } + + if (esxVI_GetStringValue(virtualMachine, "guest.hostName", + &hostname, esxVI_Occurrence_OptionalItem) < 0) { + goto cleanup; + } + + if (!hostname) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("hostName field not available (missing VMware Tools?)")); + goto cleanup; + } + + new_hostname = g_strdup(hostname); + + cleanup: + esxVI_String_Free(&propertyNameList); + esxVI_ObjectContent_Free(&virtualMachine); + + return new_hostname; +} + + static virHypervisorDriver esxHypervisorDriver = { .name = "ESX", .connectOpen = esxConnectOpen, /* 0.7.0 */ @@ -5140,6 +5193,7 @@ static virHypervisorDriver esxHypervisorDriver = { .domainSnapshotDelete = esxDomainSnapshotDelete, /* 0.8.0 */ .connectIsAlive = esxConnectIsAlive, /* 0.9.8 */ .domainHasManagedSaveImage = esxDomainHasManagedSaveImage, /* 1.2.13 */ + .domainGetHostname = esxDomainGetHostname, /* 6.8.0 */ }; -- 2.26.2