diff options
author | 2011-08-09 21:10:25 -0600 | |
---|---|---|
committer | 2011-08-10 21:59:56 -0600 | |
commit | 23b4a3f95bba44d6adb0db4b9b19fecf71a50ac1 (patch) | |
tree | a1d02efc78ca572faf45788cc6882e9f595b9f26 /tools | |
parent | virsh: fix snapshot-create-as to handle arbitrary names (diff) | |
download | libvirt-23b4a3f95bba44d6adb0db4b9b19fecf71a50ac1.tar.gz libvirt-23b4a3f95bba44d6adb0db4b9b19fecf71a50ac1.tar.bz2 libvirt-23b4a3f95bba44d6adb0db4b9b19fecf71a50ac1.zip |
virsh: add virsh snapshot-current --name
Sometimes, full XML is too much; since most snapshot commands
operate on a snapshot name, there should be an easy way to get
at the current snapshot's name. For example:
virsh snapshot-revert dom `virsh snapshot-current dom --name`
* tools/virsh.c (cmdSnapshotCurrent): Add an option.
* tools/virsh.pod (snapshot-current): Document it.
Diffstat (limited to 'tools')
-rw-r--r-- | tools/virsh.c | 31 | ||||
-rw-r--r-- | tools/virsh.pod | 4 |
2 files changed, 31 insertions, 4 deletions
diff --git a/tools/virsh.c b/tools/virsh.c index d901d58e5..1d660d0ba 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -12034,6 +12034,7 @@ static const vshCmdInfo info_snapshot_current[] = { static const vshCmdOptDef opts_snapshot_current[] = { {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")}, + {"name", VSH_OT_BOOL, 0, N_("list the name, rather than the full xml")}, {NULL, 0, 0, NULL} }; @@ -12044,6 +12045,7 @@ cmdSnapshotCurrent(vshControl *ctl, const vshCmd *cmd) bool ret = false; int current; virDomainSnapshotPtr snapshot = NULL; + char *xml = NULL; if (!vshConnectionUsability(ctl, ctl->conn)) goto cleanup; @@ -12056,7 +12058,7 @@ cmdSnapshotCurrent(vshControl *ctl, const vshCmd *cmd) if (current < 0) goto cleanup; else if (current) { - char *xml; + char *name = NULL; if (!(snapshot = virDomainSnapshotCurrent(dom, 0))) goto cleanup; @@ -12065,13 +12067,36 @@ cmdSnapshotCurrent(vshControl *ctl, const vshCmd *cmd) if (!xml) goto cleanup; - vshPrint(ctl, "%s", xml); - VIR_FREE(xml); + if (vshCommandOptBool(cmd, "name")) { + xmlDocPtr xmldoc = NULL; + xmlXPathContextPtr ctxt = NULL; + + xmldoc = xmlReadDoc((const xmlChar *) xml, "domainsnapshot.xml", + NULL, XML_PARSE_NOENT | XML_PARSE_NONET | + XML_PARSE_NOWARNING); + if (!xmldoc) + goto cleanup; + ctxt = xmlXPathNewContext(xmldoc); + if (!ctxt) { + xmlFreeDoc(xmldoc); + goto cleanup; + } + + name = virXPathString("string(/domainsnapshot/name)", ctxt); + xmlXPathFreeContext(ctxt); + xmlFreeDoc(xmldoc); + if (!name) + goto cleanup; + } + + vshPrint(ctl, "%s", name ? name : xml); + VIR_FREE(name); } ret = true; cleanup: + VIR_FREE(xml); if (snapshot) virDomainSnapshotFree(snapshot); if (dom) diff --git a/tools/virsh.pod b/tools/virsh.pod index 01b8fd68d..a6af1e6b2 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -1569,9 +1569,11 @@ Create a snapshot for domain I<domain> with the given <name> and value. If I<--print-xml> is specified, then XML appropriate for I<snapshot-create> is output, rather than actually creating a snapshot. -=item B<snapshot-current> I<domain> +=item B<snapshot-current> I<domain> [I<--name>] Output the snapshot XML for the domain's current snapshot (if any). +If I<--name> is specified, just list the snapshot name instead of the +full xml. =item B<snapshot-list> I<domain> |