"crash")
VIR_ENUM_IMPL(virDomainLifecycleAction, VIR_DOMAIN_LIFECYCLE_ACTION_LAST,
- "destroy",
- "restart",
- "rename-restart",
- "preserve")
-
-VIR_ENUM_IMPL(virDomainLifecycleCrash, VIR_DOMAIN_LIFECYCLE_CRASH_LAST,
"destroy",
"restart",
"rename-restart",
}
+static bool
+virDomainDefLifecycleActionAllowed(virDomainLifecycle type,
+ virDomainLifecycleAction action)
+{
+ switch (type) {
+ case VIR_DOMAIN_LIFECYCLE_POWEROFF:
+ case VIR_DOMAIN_LIFECYCLE_REBOOT:
+ switch (action) {
+ case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_LAST:
+ return true;
+ case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART:
+ break;
+ }
+ break;
+ case VIR_DOMAIN_LIFECYCLE_CRASH:
+ case VIR_DOMAIN_LIFECYCLE_LAST:
+ return true;
+ }
+
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Lifecycle event '%s' doesn't support '%s' action"),
+ virDomainLifecycleTypeToString(type),
+ virDomainLifecycleActionTypeToString(action));
+ return false;
+}
+
+
+static int
+virDomainDefLifecycleActionValidate(const virDomainDef *def)
+{
+ if (!virDomainDefLifecycleActionAllowed(VIR_DOMAIN_LIFECYCLE_POWEROFF,
+ def->onPoweroff)) {
+ return -1;
+ }
+
+ if (!virDomainDefLifecycleActionAllowed(VIR_DOMAIN_LIFECYCLE_REBOOT,
+ def->onReboot)) {
+ return -1;
+ }
+
+ if (!virDomainDefLifecycleActionAllowed(VIR_DOMAIN_LIFECYCLE_CRASH,
+ def->onCrash)) {
+ return -1;
+ }
+
+ return 0;
+}
+
+
static int
virDomainDefValidateInternal(const virDomainDef *def)
{
return -1;
}
+ if (virDomainDefLifecycleActionValidate(def) < 0)
+ return -1;
+
return 0;
}
if (virDomainEventActionParseXML(ctxt, "on_crash",
"string(./on_crash[1])",
&def->onCrash,
- VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY,
- virDomainLifecycleCrashTypeFromString) < 0)
+ VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY,
+ virDomainLifecycleActionTypeFromString) < 0)
goto error;
if (virDomainEventActionParseXML(ctxt, "on_lockfailure",
goto error;
if (virDomainEventActionDefFormat(buf, def->onCrash,
"on_crash",
- virDomainLifecycleCrashTypeToString) < 0)
+ virDomainLifecycleActionTypeToString) < 0)
goto error;
if (def->onLockFailure != VIR_DOMAIN_LOCK_FAILURE_DEFAULT &&
virDomainEventActionDefFormat(buf, def->onLockFailure,
VIR_DOMAIN_LIFECYCLE_ACTION_RESTART,
VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME,
VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE,
+ VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY,
+ VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART,
VIR_DOMAIN_LIFECYCLE_ACTION_LAST
} virDomainLifecycleAction;
-typedef enum {
- VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY,
- VIR_DOMAIN_LIFECYCLE_CRASH_RESTART,
- VIR_DOMAIN_LIFECYCLE_CRASH_RESTART_RENAME,
- VIR_DOMAIN_LIFECYCLE_CRASH_PRESERVE,
- VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_DESTROY,
- VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_RESTART,
-
- VIR_DOMAIN_LIFECYCLE_CRASH_LAST
-} virDomainLifecycleCrashAction;
-
typedef enum {
VIR_DOMAIN_LOCK_FAILURE_DEFAULT,
VIR_DOMAIN_LOCK_FAILURE_POWEROFF,
VIR_ENUM_DECL(virDomainCapsFeature)
VIR_ENUM_DECL(virDomainLifecycle)
VIR_ENUM_DECL(virDomainLifecycleAction)
-VIR_ENUM_DECL(virDomainLifecycleCrash)
VIR_ENUM_DECL(virDomainDevice)
VIR_ENUM_DECL(virDomainDeviceAddress)
VIR_ENUM_DECL(virDomainDiskDevice)
virDomainLeaseRemoveAt;
virDomainLifecycleActionTypeFromString;
virDomainLifecycleActionTypeToString;
-virDomainLifecycleCrashTypeFromString;
-virDomainLifecycleCrashTypeToString;
virDomainLoaderDefFree;
virDomainLoaderTypeFromString;
virDomainLoaderTypeToString;
case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE:
return LIBXL_ACTION_ON_SHUTDOWN_PRESERVE;
- case VIR_DOMAIN_LIFECYCLE_ACTION_LAST:
- break;
- }
-
- return 0;
-}
-
-
-static libxl_action_on_shutdown
-libxlActionFromVirLifecycleCrash(virDomainLifecycleCrashAction action)
-{
-
- switch (action) {
- case VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY:
- return LIBXL_ACTION_ON_SHUTDOWN_DESTROY;
-
- case VIR_DOMAIN_LIFECYCLE_CRASH_RESTART:
- return LIBXL_ACTION_ON_SHUTDOWN_RESTART;
-
- case VIR_DOMAIN_LIFECYCLE_CRASH_RESTART_RENAME:
- return LIBXL_ACTION_ON_SHUTDOWN_RESTART_RENAME;
-
- case VIR_DOMAIN_LIFECYCLE_CRASH_PRESERVE:
- return LIBXL_ACTION_ON_SHUTDOWN_PRESERVE;
-
- case VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_DESTROY:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY:
return LIBXL_ACTION_ON_SHUTDOWN_COREDUMP_DESTROY;
- case VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_RESTART:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART:
return LIBXL_ACTION_ON_SHUTDOWN_COREDUMP_RESTART;
- case VIR_DOMAIN_LIFECYCLE_CRASH_LAST:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_LAST:
break;
}
d_config->on_reboot = libxlActionFromVirLifecycle(def->onReboot);
d_config->on_poweroff = libxlActionFromVirLifecycle(def->onPoweroff);
- d_config->on_crash = libxlActionFromVirLifecycleCrash(def->onCrash);
+ d_config->on_crash = libxlActionFromVirLifecycle(def->onCrash);
return 0;
}
case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME:
goto restart;
case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART:
case VIR_DOMAIN_LIFECYCLE_ACTION_LAST:
goto endjob;
}
dom_event = virDomainEventLifecycleNewFromObj(vm,
VIR_DOMAIN_EVENT_STOPPED,
VIR_DOMAIN_EVENT_STOPPED_CRASHED);
- switch ((virDomainLifecycleCrashAction) vm->def->onCrash) {
- case VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY:
+ switch ((virDomainLifecycleAction) vm->def->onCrash) {
+ case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY:
goto destroy;
- case VIR_DOMAIN_LIFECYCLE_CRASH_RESTART:
- case VIR_DOMAIN_LIFECYCLE_CRASH_RESTART_RENAME:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME:
goto restart;
- case VIR_DOMAIN_LIFECYCLE_CRASH_PRESERVE:
- case VIR_DOMAIN_LIFECYCLE_CRASH_LAST:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_LAST:
goto endjob;
- case VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_DESTROY:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY:
libxlDomainAutoCoreDump(driver, vm);
goto destroy;
- case VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_RESTART:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART:
libxlDomainAutoCoreDump(driver, vm);
goto restart;
}
case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME:
goto restart;
case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART:
case VIR_DOMAIN_LIFECYCLE_ACTION_LAST:
goto endjob;
}
virDomainDefSetMemoryTotal(vmdef, 64 * 1024);
vmdef->onReboot = VIR_DOMAIN_LIFECYCLE_ACTION_RESTART;
- vmdef->onCrash = VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY;
+ vmdef->onCrash = VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY;
vmdef->onPoweroff = VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY;
vmdef->virtType = VIR_DOMAIN_VIRT_LXC;
/* Only add -no-reboot option if each event destroys domain */
if (def->onReboot == VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY &&
def->onPoweroff == VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY &&
- (def->onCrash == VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY ||
- def->onCrash == VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_DESTROY)) {
+ (def->onCrash == VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY ||
+ def->onCrash == VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY)) {
allowReboot = false;
virCommandAddArg(cmd, "-no-reboot");
}
VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState));
switch (action) {
- case VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_DESTROY:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY:
if (doCoreDumpToAutoDumpPath(driver, vm, VIR_DUMP_MEMORY_ONLY) < 0)
goto endjob;
ATTRIBUTE_FALLTHROUGH;
- case VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY:
qemuProcessStop(driver, vm, VIR_DOMAIN_SHUTOFF_CRASHED,
QEMU_ASYNC_JOB_DUMP, 0);
event = virDomainEventLifecycleNewFromObj(vm,
removeInactive = true;
break;
- case VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_RESTART:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART:
if (doCoreDumpToAutoDumpPath(driver, vm, VIR_DUMP_MEMORY_ONLY) < 0)
goto endjob;
ATTRIBUTE_FALLTHROUGH;
- case VIR_DOMAIN_LIFECYCLE_CRASH_RESTART:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_RESTART:
qemuDomainSetFakeReboot(driver, vm, true);
qemuProcessShutdownOrReboot(driver, vm);
break;
- case VIR_DOMAIN_LIFECYCLE_CRASH_PRESERVE:
+ case VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE:
break;
default:
def->clock.offset = VIR_DOMAIN_CLOCK_OFFSET_UTC;
def->onReboot = VIR_DOMAIN_LIFECYCLE_ACTION_RESTART;
- def->onCrash = VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY;
+ def->onCrash = VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY;
def->onPoweroff = VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY;
def->virtType = VIR_DOMAIN_VIRT_QEMU;
if (VIR_STRDUP(def->emulator, progargv[0]) < 0)
/* def:lifecycle */
def->onReboot = VIR_DOMAIN_LIFECYCLE_ACTION_RESTART;
def->onPoweroff = VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY;
- def->onCrash = VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY;
+ def->onCrash = VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY;
/* def:os */
def->os.type = VIR_DOMAIN_OSTYPE_HVM;
def->onReboot = VIR_DOMAIN_LIFECYCLE_ACTION_RESTART;
def->onPoweroff = VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY;
- def->onCrash = VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY;
+ def->onCrash = VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY;
/* get RAM parameters */
pret = PrlVmCfg_GetRamSize(sdkdom, &ram);
if (def->onReboot != VIR_DOMAIN_LIFECYCLE_ACTION_RESTART ||
def->onPoweroff != VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY ||
- def->onCrash != VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY) {
+ def->onCrash != VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("on_reboot, on_poweroff and on_crash parameters "
enum xen_on_crash_behaviour
-actionCrashLibvirt2XenapiEnum(virDomainLifecycleCrashAction action)
+actionCrashLibvirt2XenapiEnum(virDomainLifecycleAction action)
{
enum xen_on_crash_behaviour num = XEN_ON_CRASH_BEHAVIOUR_RESTART;
- if (action == VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY)
+ if (action == VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY)
num = XEN_ON_CRASH_BEHAVIOUR_DESTROY;
- else if (action == VIR_DOMAIN_LIFECYCLE_CRASH_RESTART)
+ else if (action == VIR_DOMAIN_LIFECYCLE_ACTION_RESTART)
num = XEN_ON_CRASH_BEHAVIOUR_RESTART;
- else if (action == VIR_DOMAIN_LIFECYCLE_CRASH_PRESERVE)
+ else if (action == VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE)
num = XEN_ON_CRASH_BEHAVIOUR_PRESERVE;
- else if (action == VIR_DOMAIN_LIFECYCLE_CRASH_RESTART_RENAME)
+ else if (action == VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME)
num = XEN_ON_CRASH_BEHAVIOUR_RENAME_RESTART;
- else if (action == VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_DESTROY)
+ else if (action == VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY)
num = XEN_ON_CRASH_BEHAVIOUR_COREDUMP_AND_DESTROY;
- else if (action == VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_RESTART)
+ else if (action == VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART)
num = XEN_ON_CRASH_BEHAVIOUR_COREDUMP_AND_RESTART;
return num;
}
}
-virDomainLifecycleCrashAction
+virDomainLifecycleAction
xenapiCrashExitEnum2virDomainLifecycle(enum xen_on_crash_behaviour action)
{
- virDomainLifecycleCrashAction num = VIR_DOMAIN_LIFECYCLE_CRASH_RESTART;
+ virDomainLifecycleAction num = VIR_DOMAIN_LIFECYCLE_ACTION_RESTART;
if (action == XEN_ON_CRASH_BEHAVIOUR_DESTROY)
- num = VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY;
+ num = VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY;
else if (action == XEN_ON_CRASH_BEHAVIOUR_RESTART)
- num = VIR_DOMAIN_LIFECYCLE_CRASH_RESTART;
+ num = VIR_DOMAIN_LIFECYCLE_ACTION_RESTART;
else if (action == XEN_ON_CRASH_BEHAVIOUR_PRESERVE)
- num = VIR_DOMAIN_LIFECYCLE_CRASH_PRESERVE;
+ num = VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE;
else if (action == XEN_ON_CRASH_BEHAVIOUR_RENAME_RESTART)
- num = VIR_DOMAIN_LIFECYCLE_CRASH_RESTART_RENAME;
+ num = VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME;
else if (action == XEN_ON_CRASH_BEHAVIOUR_COREDUMP_AND_DESTROY)
- num = VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_DESTROY;
+ num = VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY;
else if (action == XEN_ON_CRASH_BEHAVIOUR_COREDUMP_AND_RESTART)
- num = VIR_DOMAIN_LIFECYCLE_CRASH_COREDUMP_RESTART;
+ num = VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART;
return num;
}
actionShutdownLibvirt2XenapiEnum(virDomainLifecycleAction action);
enum xen_on_crash_behaviour
-actionCrashLibvirt2XenapiEnum(virDomainLifecycleCrashAction action);
+actionCrashLibvirt2XenapiEnum(virDomainLifecycleAction action);
char *
createXenAPIBootOrderString(int nboot, int *bootDevs);
virDomainLifecycleAction
xenapiNormalExitEnum2virDomainLifecycle(enum xen_on_normal_exit action);
-virDomainLifecycleCrashAction
+virDomainLifecycleAction
xenapiCrashExitEnum2virDomainLifecycle(enum xen_on_crash_behaviour action);
void getCpuBitMapfromString(char *mask, unsigned char *cpumap, int maplen);
if (xenConfigGetString(conf, "on_crash", &str, "restart") < 0)
return -1;
- if ((def->onCrash = virDomainLifecycleCrashTypeFromString(str)) < 0) {
+ if ((def->onCrash = virDomainLifecycleActionTypeFromString(str)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("unexpected value %s for on_crash"), str);
return -1;
return -1;
- if (!(lifecycle = virDomainLifecycleCrashTypeToString(def->onCrash))) {
+ if (!(lifecycle = virDomainLifecycleActionTypeToString(def->onCrash))) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("unexpected lifecycle action %d"), def->onCrash);
return -1;
tmp = sexpr_node(root, "domain/on_crash");
if (tmp != NULL) {
- if ((def->onCrash = virDomainLifecycleCrashTypeFromString(tmp)) < 0) {
+ if ((def->onCrash = virDomainLifecycleActionTypeFromString(tmp)) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("unknown lifecycle type %s"), tmp);
goto error;
}
} else {
- def->onCrash = VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY;
+ def->onCrash = VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY;
}
if (hvm) {
}
virBufferAsprintf(&buf, "(on_reboot '%s')", tmp);
- if (!(tmp = virDomainLifecycleCrashTypeToString(def->onCrash))) {
+ if (!(tmp = virDomainLifecycleActionTypeToString(def->onCrash))) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("unexpected lifecycle value %d"), def->onCrash);
goto error;