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 */
};