[libvirt] [PATCH] Allow overriding default URI in config file

Eric Blake eblake at redhat.com
Wed Mar 14 12:54:40 UTC 2012


On 03/14/2012 06:37 AM, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
> 
> Currently if the URI passed to virConnectOpen* is NULL, then we
> 
>  - Look for LIBVIRT_DEFAULT_URI env var
>  - Probe for drivers
> 
> This changes it so that
> 
>  - Look for LIBVIRT_DEFAULT_URI env var
>  - Look for 'uri_default' in $HOME/.libvirt/libvirt.conf
>  - Probe for drivers

Nice.  Do we need any followup patches for virsh?  That is, where should
VIRSH_DEFAULT_CONNECT_URI fit into the hierarchy?

>  docs/uri.html.in |   13 +++++++
>  src/libvirt.c    |  107 +++++++++++++++++++++++++++++++++++++-----------------
>  2 files changed, 87 insertions(+), 33 deletions(-)

Where is the change to src/libvirt.conf to document this feature?

> +++ b/docs/uri.html.in
> @@ -52,6 +52,19 @@ uri_aliases = [
>    set, no alias lookup will be attempted.
>  </p>
>  
> +    <h2><a name="URI_default">Default URI choice</a></h2>
> +
> +    <p>
> +If the URI passed to <code>virConnectOpen*</code> is NULL, then libvirt will use the following
> +logic to determine what URI to use.
> +</p>
> +
> +    <ol>
> +      <li>The environment variable <code>LIBVIRT_DEFAULT_URI</code></li>
> +      <li>The client configuration file <code>uri_default</code> parameter</li>
> +      <li>Probe each hypervisor in turn until one that works is found</li>
> +    </ol>
> +

Looks good.  The location of the client configuration file was mentioned
earlier on the same page.

>      <h2>
>        <a name="URI_virsh">Specifying URIs to virsh, virt-manager and virt-install</a>

Maybe this section should mention that without any -c option and without
VIRSH_DEFAULT_CONNECT_URI, then virsh passes NULL to the virConnectOpen,
which then falls back on the above hierarchy for libvirt in general.


>  
> +static int virConnectGetConfigFile(virConfPtr *conf)

Formatting nit - should this be two lines?


> +
> +static int virConnectGetDefaultURI(virConfPtr conf,

And this one?

> +                                   const char **name)
> +{
> +    int ret = -1;
> +    virConfValuePtr value = NULL;
> +    char *defname = getenv("LIBVIRT_DEFAULT_URI");
> +    if (defname && *defname) {
> +        VIR_DEBUG("Using LIBVIRT_DEFAULT_URI %s", defname);
> +        *name = defname;

Needs a 'ret = 0; goto cleanup;' here, otherwise...

> +    }
> +
> +    if ((value = virConfGetValue(conf, "uri_default"))) {
> +        if (value->type != VIR_CONF_STRING) {
> +            virLibConnError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                            _("Expected a string for 'uri_default' config parameter"));
> +            goto cleanup;
> +        }
> +
> +        *name = value->str;

this assignment is a memory leak if both the envvar and config file are
present.

Probably worth a v2 to fix the problems.

-- 
Eric Blake   eblake at redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120314/f327e8b5/attachment-0001.sig>


More information about the libvir-list mailing list