[PATCH 1/5] virsh: Make cmdVersion() work with split daemon
Peter Krempa
pkrempa at redhat.com
Tue Jul 18 15:47:12 UTC 2023
On Tue, Jul 18, 2023 at 17:27:33 +0200, Michal Privoznik wrote:
> When virsh connects to a non-hypervisor daemon directly (e.g.
> "nodedev:///system") and user executes 'version' they are met
> with an error message. This is because cmdVersion() calls
> virConnectGetVersion() which fails, hence the error.
>
> The reason for virConnectGetVersion() fail is simple - it's
> documented as:
>
> Get the version level of the Hypervisor running.
>
> Well, there's no hypervisor in non-hypervisor daemons and thus it
> doesn't make sense to provide an implementation in each driver's
> virConnectDriver.hypervisorDriver table (just like we do for
> other APIs, e.g. nodeConnectIsSecure()).
>
> Given all of this, just make cmdVersion() deal with the error in
> a non-fatal fashion.
>
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
> tools/virsh-host.c | 26 ++++++++++++--------------
> 1 file changed, 12 insertions(+), 14 deletions(-)
>
> diff --git a/tools/virsh-host.c b/tools/virsh-host.c
> index 0bda327cae..35e6a2eb98 100644
> --- a/tools/virsh-host.c
> +++ b/tools/virsh-host.c
> @@ -1447,21 +1447,19 @@ cmdVersion(vshControl *ctl, const vshCmd *cmd G_GNUC_UNUSED)
> vshPrint(ctl, _("Using API: %1$s %2$d.%3$d.%4$d\n"), hvType,
> major, minor, rel);
>
> - if (virConnectGetVersion(priv->conn, &hvVersion) < 0) {
> - vshError(ctl, "%s", _("failed to get the hypervisor version"));
> - return false;
> - }
> - if (hvVersion == 0) {
> - vshPrint(ctl,
> - _("Cannot extract running %1$s hypervisor version\n"), hvType);
> - } else {
> - major = hvVersion / 1000000;
> - hvVersion %= 1000000;
> - minor = hvVersion / 1000;
> - rel = hvVersion % 1000;
> + if (virConnectGetVersion(priv->conn, &hvVersion) >= 0) {
> + if (hvVersion == 0) {
> + vshPrint(ctl,
> + _("Cannot extract running %1$s hypervisor version\n"), hvType);
> + } else {
> + major = hvVersion / 1000000;
> + hvVersion %= 1000000;
> + minor = hvVersion / 1000;
> + rel = hvVersion % 1000;
>
> - vshPrint(ctl, _("Running hypervisor: %1$s %2$d.%3$d.%4$d\n"),
> - hvType, major, minor, rel);
> + vshPrint(ctl, _("Running hypervisor: %1$s %2$d.%3$d.%4$d\n"),
> + hvType, major, minor, rel);
> + }
> }
Ideally you'd also add an else branch with 'vshResetLibvirtError(); but
the other call to virConnectGetLibVersion() doesn't do that so ...
whatever ... I guess :)
>
> if (vshCommandOptBool(cmd, "daemon")) {
> --
> 2.41.0
>
Reviewed-by: Peter Krempa <pkrempa at redhat.com>
More information about the libvir-list
mailing list