On Thu, Sep 10, 2020 at 9:28 AM Pino Toscano <ptoscano@xxxxxxxxxx> wrote: > > 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 > Reviewed-by: Neal Gompa <ngompa13@xxxxxxxxx> -- 真実はいつも一つ!/ Always, there's only one truth!