]> xenbits.xensource.com Git - libvirt.git/commitdiff
virsh: add --graceful switch to destroy command
authorLaine Stump <laine@laine.org>
Fri, 3 Feb 2012 19:14:36 +0000 (14:14 -0500)
committerLaine Stump <laine@laine.org>
Fri, 3 Feb 2012 19:50:14 +0000 (14:50 -0500)
This allows virsh to use the new VIR_DOMAIN_DESTROY_GRACEUL flag for
virDomainDestroyFlags.

tools/virsh.c
tools/virsh.pod

index ed1dbb8d9cb13b67d00eea3fd684b85ccd054e88..72ca93add7c5a1db006b412c543e9c9dd16543bc 100644 (file)
@@ -4265,6 +4265,7 @@ static const vshCmdInfo info_destroy[] = {
 
 static const vshCmdOptDef opts_destroy[] = {
     {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")},
+    {"graceful", VSH_OT_BOOL, VSH_OFLAG_NONE, N_("terminate gracefully")},
     {NULL, 0, 0, NULL}
 };
 
@@ -4274,6 +4275,8 @@ cmdDestroy(vshControl *ctl, const vshCmd *cmd)
     virDomainPtr dom;
     bool ret = true;
     const char *name;
+    unsigned int flags = 0;
+    int result;
 
     if (!vshConnectionUsability(ctl, ctl->conn))
         return false;
@@ -4281,7 +4284,15 @@ cmdDestroy(vshControl *ctl, const vshCmd *cmd)
     if (!(dom = vshCommandOptDomain(ctl, cmd, &name)))
         return false;
 
-    if (virDomainDestroy(dom) == 0) {
+    if (vshCommandOptBool(cmd, "graceful"))
+       flags |= VIR_DOMAIN_DESTROY_GRACEFUL;
+
+    if (flags)
+       result = virDomainDestroyFlags(dom, VIR_DOMAIN_DESTROY_GRACEFUL);
+    else
+       result = virDomainDestroy(dom);
+
+    if (result == 0) {
         vshPrint(ctl, _("Domain %s destroyed\n"), name);
     } else {
         vshError(ctl, _("Failed to destroy domain %s"), name);
index 10b51ff74021b54db24bbd4ccc9a81b2f13d85c8..a85da1346c9d27c75271813446ef502570264a69 100644 (file)
@@ -458,7 +458,7 @@ Flag I<--title> selects operation on the title field instead of description.
 If neither of I<--edit> and I<--new_desc> are specified the note or description
 is displayed instead of being modified.
 
-=item B<destroy> I<domain-id>
+=item B<destroy> I<domain-id> [I<--graceful>]
 
 Immediately terminate the domain domain-id.  This doesn't give the domain
 OS any chance to react, and it's the equivalent of ripping the power
@@ -472,6 +472,10 @@ be lost once the guest stops running, but the snapshot contents still
 exist, and a new domain with the same name and UUID can restore the
 snapshot metadata with B<snapshot-create>.
 
+If I<--graceful> is specified, don't resort to extreme measures
+(e.g. SIGKILL) when the guest doesn't stop after a reasonable timeout;
+return an error instead.
+
 =item B<domblkstat> I<domain> I<block-device> [I<--human>]
 
 Get device block stats for a running domain.  A I<block-device> corresponds