I've wanted this command for ages :)
* tools/virsh.c (cmdDomXMLFormats): New function.
* tools/virsh.pod (domxml-formats): Document it.
---
tools/virsh.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
tools/virsh.pod | 11 +++++++++--
2 files changed, 57 insertions(+), 2 deletions(-)
diff --git a/tools/virsh.c b/tools/virsh.c
index c511e2a..b1a0fb7 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -6268,6 +6268,52 @@ cmdDomXMLToNative(vshControl *ctl, const vshCmd *cmd)
}
/*
+ * "domxml-formats" command
+ */
+static const vshCmdInfo info_domxmlformats[] = {
+ {"help", N_("List native formats compatible with domain XML")},
+ {"desc",
+ N_("List the valid formats for domxml-to-native and
domxml-from-native.")},
+ {NULL, NULL}
+};
+
+static const vshCmdOptDef opts_domxmlformats[] = {
+ {NULL, 0, 0, NULL}
+};
+
+static bool
+cmdDomXMLFormats(vshControl *ctl, const vshCmd *cmd ATTRIBUTE_UNUSED)
+{
+ bool ret = false;
+ unsigned int flags = 0;
+ char **formats = NULL;
+ int nformats = 0;
+ int i;
+
+ if (!vshConnectionUsability(ctl, ctl->conn))
+ return false;
+
+ if ((nformats = virConnectDomainNativeFormats(ctl->conn, NULL, 0,
+ flags)) < 0)
+ goto cleanup;
+
+ formats = vshCalloc(ctl, nformats, sizeof(*formats));
+ if ((nformats = virConnectDomainNativeFormats(ctl->conn, formats, nformats,
+ flags)) < 0)
+ goto cleanup;
+
+ for (i = 0; i < nformats; i++)
+ vshPrint(ctl, "%s\n", formats[i]);
+ ret = true;
+
+cleanup:
+ for (i = 0; i < nformats; i++)
+ VIR_FREE(formats[i]);
+ VIR_FREE(formats);
+ return ret;
+}
+
+/*
* "domname" command
*/
static const vshCmdInfo info_domname[] = {
@@ -15930,6 +15976,8 @@ static const vshCmdDef domManagementCmds[] = {
{"domjobinfo", cmdDomjobinfo, opts_domjobinfo, info_domjobinfo, 0},
{"domname", cmdDomname, opts_domname, info_domname, 0},
{"domuuid", cmdDomuuid, opts_domuuid, info_domuuid, 0},
+ {"domxml-formats", cmdDomXMLFormats, opts_domxmlformats,
+ info_domxmlformats, 0},
{"domxml-from-native", cmdDomXMLFromNative, opts_domxmlfromnative,
info_domxmlfromnative, 0},
{"domxml-to-native", cmdDomXMLToNative, opts_domxmltonative,
diff --git a/tools/virsh.pod b/tools/virsh.pod
index c88395b..19f93cf 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -624,19 +624,26 @@ Returns state of an interface to VMM used to control a domain. For
states other than "ok" or "error" the command also prints number of
seconds elapsed since the control interface entered its current state.
+=item B<domxml-formats>
+
+List the valid formats for use by B<domxml-from-native> and
+B<domxml-to-native>.
+
=item B<domxml-from-native> I<format> I<config>
Convert the file I<config> in the native guest configuration format
named by I<format> to a domain XML format. For QEMU/KVM hypervisor,
the I<format> argument must be B<qemu-argv>. For Xen hypervisor, the
-I<format> argument may be B<xen-xm> or B<xen-sxpr>.
+I<format> argument may be B<xen-xm> or B<xen-sxpr>. See also
+B<domxml-formats>.
=item B<domxml-to-native> I<format> I<xml>
Convert the file I<xml> in domain XML format to the native guest
configuration format named by I<format>. For QEMU/KVM hypervisor,
the I<format> argument must be B<qemu-argv>. For Xen hypervisor, the
-I<format> argument may be B<xen-xm> or B<xen-sxpr>.
+I<format> argument may be B<xen-xm> or B<xen-sxpr>. See also
+B<domxml-formats>.
=item B<dump> I<domain-id> I<corefilepath> [I<--bypass-cache>]
{ [I<--live>] | [I<--crash>] | [I<--reset>] } [I<--verbose>]
--
1.7.7.5