virsh: add [--domain DOMAIN] option to domxml-to-native DOMAIN COMMAND

The option allows someone to run domain-to-native on already existing
domain without the need of supplying their XML.  It is basically
wrapper around 'virsh dumpxml  | virsh domxml-to-native /dev/stdin'.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=835476
Signed-off-by: Daniel Liu <srwx4096@gmail.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
Daniel Liu 2017-06-02 11:04:52 -04:00 committed by John Ferlan
parent 5431055d2b
commit 41eb92783e
2 changed files with 48 additions and 17 deletions

View File

@ -9856,9 +9856,13 @@ static const vshCmdOptDef opts_domxmltonative[] = {
.flags = VSH_OFLAG_REQ,
.help = N_("target config data type format")
},
{.name = "domain",
.type = VSH_OT_DATA,
.flags = VSH_OFLAG_REQ_OPT,
.help = N_("domain name, id or uuid")
},
{.name = "xml",
.type = VSH_OT_DATA,
.flags = VSH_OFLAG_REQ,
.help = N_("xml data file to export from")
},
{.name = NULL}
@ -9867,30 +9871,51 @@ static const vshCmdOptDef opts_domxmltonative[] = {
static bool
cmdDomXMLToNative(vshControl *ctl, const vshCmd *cmd)
{
bool ret = true;
bool ret = false;
const char *format = NULL;
const char *xmlFile = NULL;
char *configData;
char *xmlData;
char *configData = NULL;
char *xmlData = NULL;
unsigned int flags = 0;
virshControlPtr priv = ctl->privData;
virDomainPtr dom = NULL;
if (vshCommandOptStringReq(ctl, cmd, "format", &format) < 0 ||
vshCommandOptStringReq(ctl, cmd, "xml", &xmlFile) < 0)
return false;
if (virFileReadAll(xmlFile, VSH_MAX_XML_FILE, &xmlData) < 0)
return false;
VSH_EXCLUSIVE_OPTIONS("domain", "xml");
configData = virConnectDomainXMLToNative(priv->conn, format, xmlData, flags);
if (configData != NULL) {
vshPrint(ctl, "%s", configData);
VIR_FREE(configData);
if (vshCommandOptBool(cmd, "domain") &&
(!(dom = virshCommandOptDomain(ctl, cmd, NULL))))
return false;
if (dom) {
xmlData = virDomainGetXMLDesc(dom, flags);
} else if (xmlFile) {
if (virFileReadAll(xmlFile, VSH_MAX_XML_FILE, &xmlData) < 0)
goto cleanup;
} else {
ret = false;
vshError(ctl, "%s", _("need either domain or domain XML"));
goto cleanup;
}
if (!xmlData) {
vshError(ctl, "%s", _("failed to retrieve XML"));
goto cleanup;
}
if (!(configData = virConnectDomainXMLToNative(priv->conn, format, xmlData, flags))) {
goto cleanup;
} else {
vshPrint(ctl, "%s", configData);
ret = true;
}
cleanup:
virshDomainFree(dom);
VIR_FREE(xmlData);
VIR_FREE(configData);
return ret;
}

View File

@ -1440,13 +1440,19 @@ the I<format> argument must be B<qemu-argv>. For Xen hypervisor, the
I<format> argument may be B<xen-xm>, B<xen-xl>, or B<xen-sxpr>. For
LXC hypervisor, the I<format> argument must be B<lxc-tools>.
=item B<domxml-to-native> I<format> I<xml>
=item B<domxml-to-native> I<format>
{ [I<--xml>] I<xml> | I<--domain> I<domain-name-or-id-or-uuid> }
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>, B<xen-xl>, or B<xen-sxpr>. For
LXC hypervisor, the I<format> argument must be B<lxc-tools>.
Convert the file I<xml> into domain XML format or convert an existing
I<--domain> to the native guest configuration format named by I<format>.
The I<xml> and I<--domain> arguments are mutually exclusive.
For the QEMU/KVM hypervisor, the I<format> argument must be B<qemu-argv>.
For the Xen hypervisor, the I<format> argument may be B<xen-xm>, B<xen-xl>,
or B<xen-sxpr>.
For the LXC hypervisor, the I<format> argument must be B<lxc-tools>.
=item B<dump> I<domain> I<corefilepath> [I<--bypass-cache>]
{ [I<--live>] | [I<--crash>] | [I<--reset>] } [I<--verbose>] [I<--memory-only>]