[Libvirt-cim] [PATCH] Replace CBGetInstance() with CBEnumInstances() in Virt_HostSystem

Richard Maciel rmaciel at linux.vnet.ibm.com
Tue Jan 27 13:59:53 UTC 2009


+1

Kaitlin Rupert wrote:
> # HG changeset patch
> # User Kaitlin Rupert <karupert at us.ibm.com>
> # Date 1232562000 28800
> # Node ID a7074d59e1e34398b8785bf218bbdbea56db0945
> # Parent  62dbae6f50a56ee2d603503a704b8cd083788131
> Replace CBGetInstance() with CBEnumInstances() in Virt_HostSystem
> 
> This is a work around to deal with the way the SBLIM provider determines the
> FQDN of a host system.  The value the SBLIM provider returns can depend on
> how the /etc/hosts file is formatted, as well as other factors (running
> dnsdomainname caused the provider to print two different values on my system).
> 
> Signed-off-by: Kaitlin Rupert <karupert at us.ibm.com>
> 
> diff -r 62dbae6f50a5 -r a7074d59e1e3 src/Virt_HostSystem.c
> --- a/src/Virt_HostSystem.c	Tue Jan 20 22:27:01 2009 -0800
> +++ b/src/Virt_HostSystem.c	Wed Jan 21 10:20:00 2009 -0800
> @@ -144,16 +144,10 @@
>                               CMPIInstance **inst)
>  {
>          CMPIObjectPath *path;
> +        CMPIEnumeration *en  = NULL;
> +        CMPIData data;
>          CMPIStatus s;
>          const char *cn = "Linux_ComputerSystem";
> -        char name[256];
> -
> -        if (get_fqdn(name, sizeof(name)) != 0) {
> -                cu_statusf(broker, &s,
> -                           CMPI_RC_ERR_FAILED,
> -                           "Unable to get hostname: %m");
> -                return s;
> -        }
> 
>          path = CMNewObjectPath(broker, "root/cimv2", cn, &s);
>          if ((path == NULL) || (s.rc != CMPI_RC_OK)) {
> @@ -163,11 +157,33 @@
>                  return s;
>          }
> 
> -        CMAddKey(path, "CreationClassName", cn, CMPI_chars);
> -        CMAddKey(path, "Name", name, CMPI_chars);
> +        /* FIXME:  This approach may return the wrong instance if more than
> +           one SBLIM Linux_ComputerSystem instance exists on the system.
> +           This isn't likely to happen in most cases, but a better approach 
> +           should be used here.
> +         */
> +        en = CBEnumInstances(broker, context, path, NULL, &s);
> +        if (en == NULL) {
> +                cu_statusf(broker, &s,
> +                           CMPI_RC_ERR_FAILED,
> +                           "Upcall EnumInstances of %s class failed",
> +                           cn);
> +                goto out;
> +        }
> 
> -        *inst = CBGetInstance(broker, context, path, NULL, &s);
> +        if (CMHasNext(en, &s)) {
> +                data = CMGetNext(en, &s);
> +                if (CMIsNullObject(data.value.inst)) {
> +                        cu_statusf(broker, &s,
> +                                   CMPI_RC_ERR_FAILED,
> +                                   "Failed to retrieve enumeration entry");
> +                        goto out;
> +                }
> 
> +                *inst = data.value.inst;
> +        }
> +
> + out:
>          if (s.rc != CMPI_RC_OK) {
>                  CU_DEBUG("SBLIM: %i %s", s.rc, CMGetCharPtr(s.msg));
>          } else {
> 
> _______________________________________________
> Libvirt-cim mailing list
> Libvirt-cim at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim


-- 
Richard Maciel, MSc
IBM Linux Technology Center
rmaciel at linux.vnet.ibm.com




More information about the Libvirt-cim mailing list