提交 76d9f656 编写于 作者: D Daniel P. Berrange

Introduce two new methods for triggering controlled shutdown/reboot

The virDomainShutdownFlags and virDomainReboot APIs allow the caller
to request the operation is implemented via either acpi button press
or a guest agent. For containers, a couple of other methods make
sense, a message to /dev/initctl, and direct kill(SIGTERM|HUP) of
the container init process.
Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
上级 dff4a753
...@@ -1385,6 +1385,8 @@ typedef enum { ...@@ -1385,6 +1385,8 @@ typedef enum {
VIR_DOMAIN_SHUTDOWN_DEFAULT = 0, /* hypervisor choice */ VIR_DOMAIN_SHUTDOWN_DEFAULT = 0, /* hypervisor choice */
VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN = (1 << 0), /* Send ACPI event */ VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN = (1 << 0), /* Send ACPI event */
VIR_DOMAIN_SHUTDOWN_GUEST_AGENT = (1 << 1), /* Use guest agent */ VIR_DOMAIN_SHUTDOWN_GUEST_AGENT = (1 << 1), /* Use guest agent */
VIR_DOMAIN_SHUTDOWN_INITCTL = (1 << 2), /* Use initctl */
VIR_DOMAIN_SHUTDOWN_SIGNAL = (1 << 3), /* Send a signal */
} virDomainShutdownFlagValues; } virDomainShutdownFlagValues;
int virDomainShutdown (virDomainPtr domain); int virDomainShutdown (virDomainPtr domain);
...@@ -1395,6 +1397,8 @@ typedef enum { ...@@ -1395,6 +1397,8 @@ typedef enum {
VIR_DOMAIN_REBOOT_DEFAULT = 0, /* hypervisor choice */ VIR_DOMAIN_REBOOT_DEFAULT = 0, /* hypervisor choice */
VIR_DOMAIN_REBOOT_ACPI_POWER_BTN = (1 << 0), /* Send ACPI event */ VIR_DOMAIN_REBOOT_ACPI_POWER_BTN = (1 << 0), /* Send ACPI event */
VIR_DOMAIN_REBOOT_GUEST_AGENT = (1 << 1), /* Use guest agent */ VIR_DOMAIN_REBOOT_GUEST_AGENT = (1 << 1), /* Use guest agent */
VIR_DOMAIN_REBOOT_INITCTL = (1 << 2), /* Use initctl */
VIR_DOMAIN_REBOOT_SIGNAL = (1 << 3), /* Send a signal */
} virDomainRebootFlagValues; } virDomainRebootFlagValues;
int virDomainReboot (virDomainPtr domain, int virDomainReboot (virDomainPtr domain,
......
...@@ -4046,8 +4046,13 @@ cmdShutdown(vshControl *ctl, const vshCmd *cmd) ...@@ -4046,8 +4046,13 @@ cmdShutdown(vshControl *ctl, const vshCmd *cmd)
flags |= VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN; flags |= VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN;
} else if (STREQ(mode, "agent")) { } else if (STREQ(mode, "agent")) {
flags |= VIR_DOMAIN_SHUTDOWN_GUEST_AGENT; flags |= VIR_DOMAIN_SHUTDOWN_GUEST_AGENT;
} else if (STREQ(mode, "initctl")) {
flags |= VIR_DOMAIN_SHUTDOWN_INITCTL;
} else if (STREQ(mode, "signal")) {
flags |= VIR_DOMAIN_SHUTDOWN_SIGNAL;
} else { } else {
vshError(ctl, _("Unknown mode %s value, expecting 'acpi' or 'agent'"), mode); vshError(ctl, _("Unknown mode %s value, expecting "
"'acpi', 'agent', 'initctl' or 'signal'"), mode);
return false; return false;
} }
} }
...@@ -4104,8 +4109,13 @@ cmdReboot(vshControl *ctl, const vshCmd *cmd) ...@@ -4104,8 +4109,13 @@ cmdReboot(vshControl *ctl, const vshCmd *cmd)
flags |= VIR_DOMAIN_REBOOT_ACPI_POWER_BTN; flags |= VIR_DOMAIN_REBOOT_ACPI_POWER_BTN;
} else if (STREQ(mode, "agent")) { } else if (STREQ(mode, "agent")) {
flags |= VIR_DOMAIN_REBOOT_GUEST_AGENT; flags |= VIR_DOMAIN_REBOOT_GUEST_AGENT;
} else if (STREQ(mode, "initctl")) {
flags |= VIR_DOMAIN_REBOOT_INITCTL;
} else if (STREQ(mode, "signal")) {
flags |= VIR_DOMAIN_REBOOT_SIGNAL;
} else { } else {
vshError(ctl, _("Unknown mode %s value, expecting 'acpi' or 'agent'"), mode); vshError(ctl, _("Unknown mode %s value, expecting "
"'acpi', 'agent', 'initctl' or 'signal'"), mode);
return false; return false;
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册