mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-31 00:45:18 +00:00
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: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
dff4a753c4
commit
76d9f65644
@ -1385,6 +1385,8 @@ typedef enum {
|
||||
VIR_DOMAIN_SHUTDOWN_DEFAULT = 0, /* hypervisor choice */
|
||||
VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN = (1 << 0), /* Send ACPI event */
|
||||
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;
|
||||
|
||||
int virDomainShutdown (virDomainPtr domain);
|
||||
@ -1395,6 +1397,8 @@ typedef enum {
|
||||
VIR_DOMAIN_REBOOT_DEFAULT = 0, /* hypervisor choice */
|
||||
VIR_DOMAIN_REBOOT_ACPI_POWER_BTN = (1 << 0), /* Send ACPI event */
|
||||
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;
|
||||
|
||||
int virDomainReboot (virDomainPtr domain,
|
||||
|
@ -4046,8 +4046,13 @@ cmdShutdown(vshControl *ctl, const vshCmd *cmd)
|
||||
flags |= VIR_DOMAIN_SHUTDOWN_ACPI_POWER_BTN;
|
||||
} else if (STREQ(mode, "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 {
|
||||
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;
|
||||
}
|
||||
}
|
||||
@ -4104,8 +4109,13 @@ cmdReboot(vshControl *ctl, const vshCmd *cmd)
|
||||
flags |= VIR_DOMAIN_REBOOT_ACPI_POWER_BTN;
|
||||
} else if (STREQ(mode, "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 {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user