[libvirt] [PATCH] Explicitly error on uri=qemu://system
Maxim Nestratov
mnestratov at virtuozzo.com
Tue Apr 19 07:59:51 UTC 2016
19.04.2016 2:04, Cole Robinson пишет:
> It's a fairly common error that a user tries to connect to a URI
> like qemu://system or qemu://session (missing a slash). This errors
> like:
>
> $ virsh --connect qemu://session
> error: failed to connect to the hypervisor
> error: Unable to resolve address 'session' service '16514': No address associated with hostname
>
> If you already know that the standard qemu URI has 3 slashes, that
> error will make it obvious enough. But new user's may not get it.
> There's even a RHEL support page explicitly mentioning it!:
>
> https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Virtualization_Deployment_and_Administration_Guide/sect-Troubleshooting-Common_libvirt_errors_and_troubleshooting.html
>
> Catch this error early in libvirt.c virConnectOpen for qemu (and vbox
> which has similar rules
Please, add 'vz' also as it suffers from the problem too. Though it
doesn't support vz:///session it clearly says about it in the error message.
>
> https://bugzilla.redhat.com/show_bug.cgi?id=1038304
> ---
> src/libvirt.c | 32 ++++++++++++++++++++++++++++++++
> 1 file changed, 32 insertions(+)
>
> diff --git a/src/libvirt.c b/src/libvirt.c
> index a21d00e..7607ae3 100644
> --- a/src/libvirt.c
> +++ b/src/libvirt.c
> @@ -928,6 +928,33 @@ virConnectGetDefaultURI(virConfPtr conf,
> }
>
>
> +/*
> + * Check to see if an invalid URI like qemu://system (missing /) was passed,
> + * offer the suggested fix.
> + */
> +static int
> +check_uri_missing_slash(const char *uristr, virURIPtr uri)
> +{
> + /* These drivers _only_ accepts URIs with a 'path' element */
> + if (STRNEQ(uri->scheme, "qemu") &&
> + STRNEQ(uri->scheme, "vbox"))
> + return 0;
> +
> + if (uri->path != NULL)
> + return 0;
> +
> + if (STREQ(uri->server, "session") ||
> + STREQ(uri->server, "system")) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("invalid URI %s (maybe you want %s:///%s)"),
> + uristr, uri->scheme, uri->server);
> + return -1;
> + }
> +
> + return 0;
> +}
> +
> +
> static virConnectPtr
> do_open(const char *name,
> virConnectAuthPtr auth,
> @@ -995,6 +1022,11 @@ do_open(const char *name,
> NULLSTR(ret->uri->user), ret->uri->port,
> NULLSTR(ret->uri->path));
>
> + if (check_uri_missing_slash(alias ? alias : name, ret->uri) < 0) {
> + VIR_FREE(alias);
> + goto failed;
> + }
> +
> VIR_FREE(alias);
> } else {
> VIR_DEBUG("no name, allowing driver auto-select");
More information about the libvir-list
mailing list