]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virsh: Make cmdVersion() work with split daemon
authorMichal Privoznik <mprivozn@redhat.com>
Mon, 17 Jul 2023 13:05:19 +0000 (15:05 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 19 Jul 2023 11:08:30 +0000 (13:08 +0200)
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@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
tools/virsh-host.c

index 0bda327cae2f4afc97960f593072f8b6f71ec9a2..ad440d5123be1a76c16fbec0603dd6c2a35f57cf 100644 (file)
@@ -1448,20 +1448,25 @@ cmdVersion(vshControl *ctl, const vshCmd *cmd G_GNUC_UNUSED)
              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);
+        if (last_error->code == VIR_ERR_NO_SUPPORT) {
+            vshResetLibvirtError();
+        } else {
+            vshError(ctl, "%s", _("failed to get the hypervisor version"));
+            return false;
+        }
     } else {
-        major = hvVersion / 1000000;
-        hvVersion %= 1000000;
-        minor = hvVersion / 1000;
-        rel = hvVersion % 1000;
+        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);
+        }
     }
 
     if (vshCommandOptBool(cmd, "daemon")) {