]> xenbits.xensource.com Git - libvirt.git/commitdiff
virsh: introduce set-lifecycle-action command
authorPavel Hrdina <phrdina@redhat.com>
Thu, 12 Oct 2017 14:25:43 +0000 (16:25 +0200)
committerPavel Hrdina <phrdina@redhat.com>
Thu, 19 Oct 2017 09:52:28 +0000 (11:52 +0200)
Reviewed-by: John Ferlan <jferlan@redhat.com>
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
tools/virsh-domain.c
tools/virsh.pod

index a50713d6e4ac2e3da812d208348f2141a5aedd77..e1a312a6a6e08d769bc994a445826105c6a26d63 100644 (file)
@@ -5516,6 +5516,102 @@ cmdScreenshot(vshControl *ctl, const vshCmd *cmd)
     return ret;
 }
 
+/*
+ * "set-lifecycle-action" command
+ */
+static const vshCmdInfo info_setLifecycleAction[] = {
+    {.name = "help",
+     .data = N_("change lifecycle actions")
+    },
+    {.name = "desc",
+     .data = N_("Change lifecycle actions for the guest domain.")
+    },
+    {.name = NULL}
+};
+
+static const vshCmdOptDef opts_setLifecycleAction[] = {
+    VIRSH_COMMON_OPT_DOMAIN_FULL,
+    {.name = "type",
+     .type = VSH_OT_STRING,
+     .flags = VSH_OFLAG_REQ,
+     .help = N_("lifecycle type to modify")
+    },
+    {.name = "action",
+     .type = VSH_OT_STRING,
+     .flags = VSH_OFLAG_REQ,
+     .help = N_("lifecycle action to set")
+    },
+    VIRSH_COMMON_OPT_DOMAIN_CONFIG,
+    VIRSH_COMMON_OPT_DOMAIN_LIVE,
+    VIRSH_COMMON_OPT_DOMAIN_CURRENT,
+    {.name = NULL}
+};
+
+VIR_ENUM_IMPL(virDomainLifecycle, VIR_DOMAIN_LIFECYCLE_LAST,
+              "poweroff",
+              "reboot",
+              "crash")
+
+VIR_ENUM_IMPL(virDomainLifecycleAction, VIR_DOMAIN_LIFECYCLE_ACTION_LAST,
+              "destroy",
+              "restart",
+              "rename-restart",
+              "preserve",
+              "coredump-destroy",
+              "coredump-restart")
+
+static bool
+cmdSetLifecycleAction(vshControl *ctl, const vshCmd *cmd)
+{
+    virDomainPtr dom;
+    bool ret = true;
+    bool config = vshCommandOptBool(cmd, "config");
+    bool live = vshCommandOptBool(cmd, "live");
+    bool current = vshCommandOptBool(cmd, "current");
+    const char *typeStr;
+    const char *actionStr;
+    unsigned int type;
+    unsigned int action;
+    unsigned int flags = 0;
+    int tmpVal;
+
+    VSH_EXCLUSIVE_OPTIONS_VAR(current, live);
+    VSH_EXCLUSIVE_OPTIONS_VAR(current, config);
+
+    if (config)
+        flags |= VIR_DOMAIN_AFFECT_CONFIG;
+    if (live)
+        flags |= VIR_DOMAIN_AFFECT_LIVE;
+
+    if (vshCommandOptStringReq(ctl, cmd, "type", &typeStr) < 0 ||
+        vshCommandOptStringReq(ctl, cmd, "action", &actionStr) < 0) {
+        return false;
+    }
+
+    if ((tmpVal = virDomainLifecycleTypeFromString(typeStr)) < 0) {
+        vshError(ctl, _("Invalid lifecycle type '%s'."), typeStr);
+        return false;
+    }
+    type = tmpVal;
+
+    if ((tmpVal = virDomainLifecycleActionTypeFromString(actionStr)) < 0) {
+        vshError(ctl, _("Invalid lifecycle action '%s'."), actionStr);
+        return false;
+    }
+    action = tmpVal;
+
+    if (!(dom = virshCommandOptDomain(ctl, cmd, NULL)))
+        return false;
+
+    if (virDomainSetLifecycleAction(dom, type, action, flags) < 0) {
+        vshError(ctl, "%s", _("Unable to change lifecycle action."));
+        ret = false;
+    }
+
+    virshDomainFree(dom);
+    return ret;
+}
+
 /*
  * "set-user-password" command
  */
@@ -14249,6 +14345,12 @@ const vshCmdDef domManagementCmds[] = {
      .info = info_screenshot,
      .flags = 0
     },
+    {.name = "set-lifecycle-action",
+     .handler = cmdSetLifecycleAction,
+     .opts = opts_setLifecycleAction,
+     .info = info_setLifecycleAction,
+     .flags = 0
+    },
     {.name = "set-user-password",
      .handler = cmdSetUserPassword,
      .opts = opts_set_user_password,
index 1847df268fda73c35f3f0beb8af8c60fa28fe2e9..69cc42338df26490a0be3d09224c45224295bcc9 100644 (file)
@@ -2331,6 +2331,13 @@ the value from the host, use the B<virsh memtune> command. In order to view
 the current memory in use and the maximum value allowed to set memory, use
 the B<virsh dominfo> command.
 
+=item B<set-lifecycle-action> I<domain> I<type> I<action>
+[[I<--config>] [I<--live>] | [I<--current>]]
+
+Set the lifecycle I<action> for specified lifecycle I<type>. For the list of
+lifecycle types and actions and possible combinations see the documentation at
+L<https://libvirt.org/formatdomain.html#elementsEvents>.
+
 =item B<set-user-password> I<domain> I<user> I<password> [I<--encrypted>]
 
 Set the password for the I<user> account in the guest domain.