aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2011-08-09 21:10:25 -0600
committerEric Blake <eblake@redhat.com>2011-08-10 21:59:56 -0600
commit23b4a3f95bba44d6adb0db4b9b19fecf71a50ac1 (patch)
treea1d02efc78ca572faf45788cc6882e9f595b9f26 /tools
parentvirsh: fix snapshot-create-as to handle arbitrary names (diff)
downloadlibvirt-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.c31
-rw-r--r--tools/virsh.pod4
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>