[libvirt PATCH] esx: implement domainGetHostname

Neal Gompa ngompa13 at gmail.com
Sat Sep 12 16:15:39 UTC 2020


On Thu, Sep 10, 2020 at 9:28 AM Pino Toscano <ptoscano at redhat.com> wrote:
>
> 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
>

Reviewed-by: Neal Gompa <ngompa13 at gmail.com>


-- 
真実はいつも一つ!/ Always, there's only one truth!





More information about the libvir-list mailing list