mirror of
https://github.com/libvirt/libvirt.git
synced 2026-07-31 08:38:16 -05:00
virsh: Make --type argument of detach-interface optional
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>
This commit is contained in:
@@ -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.
|
||||
|
||||
+10
-3
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user