]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virsh: Make --type argument of detach-interface optional master
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 18 Jun 2026 07:53:09 +0000 (09:53 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 18 Jun 2026 12:11:51 +0000 (14:11 +0200)
The detach-interface virsh command requires domain (obviously)
and --type to identify <interface/>. Optionally, --mac can be
provided to chose from multiple interfaces. Well, that renders
--type argument redundant. I mean, if there are but unique MACs
within domain XML, then interface type is implied. If there are
duplicate MACs then --type can help to differentiate, though at
that point detach-device seems like a better fit.

Long story short, make --type optional.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
docs/manpages/virsh.rst
tools/virsh-domain.c

index 39d91d83752a36a5718a03eaca71399a4fa9affd..a10d29e0ea79d53af74bf9901b6c09aee5f37c85 100644 (file)
@@ -5586,14 +5586,18 @@ detach-interface
 
 ::
 
-   detach-interface domain type [--mac mac]
+   detach-interface domain [type] [--mac mac]
       [[[--live] [--config] | [--current]] | [--persistent]] [--print-xml]
 
 Detach a network interface from a domain.
-*type* can be either *network* to indicate a physical network device or
-*bridge* to indicate a bridge to a device. It is recommended to use the
-*mac* option to distinguish between the interfaces if more than one are
-present on the domain.
+
+In case when multiple interfaces are present in the *type* and/or
+*--mac* must be used to narrow down the selection to 1 interface.
+
+*type* can be either *network* to indicate a physical network device
+*bridge* to indicate a bridge to a device.
+
+*--mac* can select the interface based on the configured MAC address.
 
 If *--live* is specified, affect a running domain.
 If *--config* is specified, affect the next startup of a persistent guest.
index f9de3b42a9b5e3c03e6997269e4188610663955c..8a6f868e346af966994e79b686db944b0c453d2e 100644 (file)
@@ -12782,7 +12782,6 @@ static const vshCmdOptDef opts_detach_interface[] = {
     {.name = "type",
      .type = VSH_OT_STRING,
      .positional = true,
-     .required = true,
      .help = N_("network interface type")
     },
     {.name = "mac",
@@ -12816,7 +12815,7 @@ virshDomainDetachInterface(char *doc,
     g_autoptr(xmlDoc) xml = NULL;
     g_autoptr(xmlXPathContext) ctxt = NULL;
     g_autofree char *detach_xml = NULL;
-    g_autofree char *xpath = g_strdup_printf("/domain/devices/interface[@type='%s']", type);
+    g_autofree char *xpath = NULL;
     g_autofree xmlNodePtr *nodes = NULL;
     ssize_t nnodes;
     xmlNodePtr matchNode = NULL;
@@ -12827,8 +12826,16 @@ virshDomainDetachInterface(char *doc,
         return false;
     }
 
+    if (type)
+        xpath = g_strdup_printf("/domain/devices/interface[@type='%s']", type);
+    else
+        xpath = g_strdup("/domain/devices/interface");
+
     if ((nnodes = virXPathNodeSet(xpath, ctxt, &nodes)) <= 0) {
-        vshError(ctl, _("No interface found whose type is %1$s"), type);
+        if (type)
+            vshError(ctl, _("No interface found whose type is %1$s"), type);
+        else
+            vshError(ctl, "%s", _("Domain has no interfaces"));
         return false;
     }