[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