Signed-off-by: Chris Lalancette <clalance(a)redhat.com>
---
tools/virsh.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
tools/virsh.pod | 6 ++++++
2 files changed, 61 insertions(+), 0 deletions(-)
diff --git a/tools/virsh.c b/tools/virsh.c
index 2d749de..8e5aa42 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -1452,6 +1452,60 @@ cmdManagedSave(vshControl *ctl, const vshCmd *cmd)
}
/*
+ * "managedsave-remove" command
+ */
+static const vshCmdInfo info_managedsaveremove[] = {
+ {"help", N_("Remove managed save of a domain")},
+ {"desc", N_("Remove an existing managed save state file from a
domain")},
+ {NULL, NULL}
+};
+
+static const vshCmdOptDef opts_managedsaveremove[] = {
+ {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or
uuid")},
+ {NULL, 0, 0, NULL}
+};
+
+static int
+cmdManagedSaveRemove(vshControl *ctl, const vshCmd *cmd)
+{
+ virDomainPtr dom;
+ char *name;
+ int ret = FALSE;
+ int hassave;
+
+ if (!vshConnectionUsability(ctl, ctl->conn))
+ return FALSE;
+
+ if (!(dom = vshCommandOptDomain(ctl, cmd, &name)))
+ return FALSE;
+
+ hassave = virDomainHasManagedSaveImage(dom, 0);
+ if (hassave < 0) {
+ vshError(ctl, _("Failed to check for domain managed save image"));
+ goto cleanup;
+ }
+
+ if (hassave) {
+ if (virDomainManagedSaveRemove(dom, 0) < 0) {
+ vshError(ctl, _("Failed to remove managed save image for domain
%s"),
+ name);
+ goto cleanup;
+ }
+ else
+ vshPrint(ctl, _("Removed managedsave image for domain %s"), name);
+ }
+ else
+ vshPrint(ctl, _("Domain %s has no manage save image; removal
skipped"),
+ name);
+
+ ret = TRUE;
+
+cleanup:
+ virDomainFree(dom);
+ return ret;
+}
+
+/*
* "schedinfo" command
*/
static const vshCmdInfo info_schedinfo[] = {
@@ -9273,6 +9327,7 @@ static const vshCmdDef commands[] = {
{"iface-destroy", cmdInterfaceDestroy, opts_interface_destroy,
info_interface_destroy},
{"managedsave", cmdManagedSave, opts_managedsave, info_managedsave},
+ {"managedsave-remove", cmdManagedSaveRemove, opts_managedsaveremove,
info_managedsaveremove},
{"nodeinfo", cmdNodeinfo, NULL, info_nodeinfo},
diff --git a/tools/virsh.pod b/tools/virsh.pod
index 2b2227f..eb1fd04 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -380,6 +380,12 @@ Ask libvirt to save a running domain state in a place managed by
libvirt.
If libvirt is asked to restart the domain later on it will resume it from
the saved domain state (and the state is discarded).
+=item B<managedsave-remove> I<domain-id>
+
+Remove the managed save file for a domain if it exists. The next time the
+domain is started it will not restore to its previous state but instead will
+do a full boot.
+
=item B<migrate> optional I<--live> I<--suspend> I<domain-id>
I<desturi> I<migrateuri>
Migrate domain to another host. Add --live for live migration; --suspend
--
1.6.6.1