virsh: Introduce --xpath and --wrap to domcapabilities

Similarly to dumpxml, let's have --xpath and --wrap to the
'domcapabilities' command since users might be interested only in
a subset of domcapabilities XML.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Kristina Hanicova <khanicov@redhat.com>
This commit is contained in:
Michal Privoznik 2023-04-14 16:06:02 +02:00
parent 332385aa7e
commit 98d5b07f6d
2 changed files with 23 additions and 4 deletions

View File

@ -569,6 +569,7 @@ domcapabilities
::
domcapabilities [virttype] [emulatorbin] [arch] [machine]
[--xpath EXPRESSION] [--wrap]
Print an XML document describing the domain capabilities for the
@ -603,6 +604,13 @@ supplied along with either the *emulatorbin* or *arch* in order to
generate output for the default *machine*. Supplying a *machine*
value will generate output for the specific machine.
If the **--xpath** argument provides an XPath expression, it will be
evaluated against the output XML and only those matching nodes will
be printed. The default behaviour is to print each matching node as
a standalone document, however, for ease of additional processing,
the **--wrap** argument will cause the matching node to be wrapped
in a common root node.
pool-capabilities
-----------------

View File

@ -112,6 +112,16 @@ static const vshCmdOptDef opts_domcapabilities[] = {
.type = VSH_OT_STRING,
.help = N_("machine type (/domain/os/type/@machine)"),
},
{.name = "xpath",
.type = VSH_OT_STRING,
.flags = VSH_OFLAG_REQ_OPT,
.completer = virshCompleteEmpty,
.help = N_("xpath expression to filter the XML document")
},
{.name = "wrap",
.type = VSH_OT_BOOL,
.help = N_("wrap xpath results in an common root element"),
},
{.name = NULL}
};
@ -123,13 +133,16 @@ cmdDomCapabilities(vshControl *ctl, const vshCmd *cmd)
const char *emulatorbin = NULL;
const char *arch = NULL;
const char *machine = NULL;
const char *xpath = NULL;
const unsigned int flags = 0; /* No flags so far */
bool wrap = vshCommandOptBool(cmd, "wrap");
virshControl *priv = ctl->privData;
if (vshCommandOptStringReq(ctl, cmd, "virttype", &virttype) < 0 ||
vshCommandOptStringReq(ctl, cmd, "emulatorbin", &emulatorbin) < 0 ||
vshCommandOptStringReq(ctl, cmd, "arch", &arch) < 0 ||
vshCommandOptStringReq(ctl, cmd, "machine", &machine) < 0)
vshCommandOptStringReq(ctl, cmd, "machine", &machine) < 0 ||
vshCommandOptStringQuiet(ctl, cmd, "xpath", &xpath) < 0)
return false;
caps = virConnectGetDomainCapabilities(priv->conn, emulatorbin,
@ -139,9 +152,7 @@ cmdDomCapabilities(vshControl *ctl, const vshCmd *cmd)
return false;
}
vshPrint(ctl, "%s\n", caps);
return true;
return virshDumpXML(ctl, caps, "domcapabilities", xpath, wrap);
}
/*