via new virsh command 'vol-jobabort'. Currently, it accepts
only volume specification as argument.
---
tools/virsh.c | 39 +++++++++++++++++++++++++++++++++++++++
1 files changed, 39 insertions(+), 0 deletions(-)
diff --git a/tools/virsh.c b/tools/virsh.c
index 630b77f..00668ff 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -12497,6 +12497,44 @@ cmdVolPath(vshControl *ctl, const vshCmd *cmd)
return true;
}
+/*
+ * "vol-jobabort" command
+ */
+static const vshCmdInfo info_vol_jobabort[] = {
+ {"help", N_("abort active volume job")},
+ {"desc", N_("Aborts the currently running volume job")},
+ {NULL, NULL}
+};
+
+static const vshCmdOptDef opts_vol_jobabort[] = {
+ {"vol", VSH_OT_DATA, VSH_OFLAG_REQ, N_("volume name or key")},
+ {"pool", VSH_OT_STRING, 0, N_("pool name or uuid")},
+ {NULL, 0, 0, NULL}
+};
+
+static bool
+cmdVolJobAbort(vshControl *ctl, const vshCmd *cmd)
+{
+ virStorageVolPtr vol;
+ bool ret = false;
+
+ if (!vshConnectionUsability(ctl, ctl->conn))
+ return false;
+
+ if (!(vol = vshCommandOptVol(ctl, cmd, "vol", "pool", NULL))) {
+ return false;
+ }
+
+ if (virStorageVolAbortJob(vol, 0) < 0)
+ goto cleanup;
+
+ vshPrint(ctl, _("Job successfully aborted"));
+ ret = true;
+
+cleanup:
+ virStorageVolFree(vol);
+ return ret;
+}
/*
* "secret-define" command
@@ -17239,6 +17277,7 @@ static const vshCmdDef storageVolCmds[] = {
{"vol-download", cmdVolDownload, opts_vol_download, info_vol_download, 0},
{"vol-dumpxml", cmdVolDumpXML, opts_vol_dumpxml, info_vol_dumpxml, 0},
{"vol-info", cmdVolInfo, opts_vol_info, info_vol_info, 0},
+ {"vol-jobabort", cmdVolJobAbort, opts_vol_jobabort, info_vol_jobabort, 0},
{"vol-key", cmdVolKey, opts_vol_key, info_vol_key, 0},
{"vol-list", cmdVolList, opts_vol_list, info_vol_list, 0},
{"vol-name", cmdVolName, opts_vol_name, info_vol_name, 0},
--
1.7.8.5