[libvirt PATCH] esx: implement domainGetHostname

Pino Toscano ptoscano at redhat.com
Thu Sep 10 13:28:23 UTC 2020


Implement the .domainGetHostname hypervisor driver API to get the
hostname of a running guest (needs VMware Tools).

Signed-off-by: Pino Toscano <ptoscano at 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




More information about the libvir-list mailing list