Implement the .domainGetHostname hypervisor driver API to get the
hostname of a running guest (needs VMware Tools).
Signed-off-by: Pino Toscano <ptoscano(a)redhat.com>
---
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(a)gmail.com>
--
真実はいつも一つ!/ Always, there's only one truth!