From 3c79c08299b51d09fd19be1293f1d637ba5d2432 Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Thu, 10 Sep 2020 14:35:39 +0200 Subject: [PATCH] esx: implement domainGetHostname MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implement the .domainGetHostname hypervisor driver API to get the hostname of a running guest (needs VMware Tools). Signed-off-by: Pino Toscano Reviewed-by: Ján Tomko Reviewed-by: Neal Gompa --- 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.

    +
  • + virDomainGetHostname +
  • virDomainReboot
  • 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 */ };