diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index f9fe6cac5f..f6f24b1c28 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -907,15 +907,11 @@ This guest NUMA specification is currently available only for QEMU/KVM.

-

Lifecycle control

+

Events configuration

It is sometimes necessary to override the default actions taken - when a guest OS triggers a lifecycle operation. The following - collections of elements allow the actions to be specified. A - common use case is to force a reboot to be treated as a poweroff - when doing the initial OS installation. This allows the VM to be - re-configured for the first post-install bootup. + on various events.

@@ -925,6 +921,13 @@
   <on_crash>restart</on_crash>
   ...
+

+ The following collections of elements allow the actions to be + specified when a guest OS triggers a lifecycle operation. A + common use case is to force a reboot to be treated as a poweroff + when doing the initial OS installation. This allows the VM to be + re-configured for the first post-install bootup. +

on_poweroff
The content of this element specifies the action to take when diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index f47fdadd62..ab8d4a11f7 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -51,7 +51,7 @@ - + @@ -2226,10 +2226,10 @@ - + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 33e1e7fe6b..40abf39820 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7518,11 +7518,12 @@ error: return NULL; } -static int virDomainLifecycleParseXML(xmlXPathContextPtr ctxt, - const char *xpath, - int *val, - int defaultVal, - virLifecycleFromStringFunc convFunc) +static int virDomainEventActionParseXML(xmlXPathContextPtr ctxt, + const char *name, + const char *xpath, + int *val, + int defaultVal, + virEventActionFromStringFunc convFunc) { char *tmp = virXPathString(xpath, ctxt); if (tmp == NULL) { @@ -7531,7 +7532,7 @@ static int virDomainLifecycleParseXML(xmlXPathContextPtr ctxt, *val = convFunc(tmp); if (*val < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("unknown lifecycle action %s"), tmp); + _("unknown %s action: %s"), name, tmp); VIR_FREE(tmp); return -1; } @@ -8941,20 +8942,25 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps, VIR_FREE(nodes); } - if (virDomainLifecycleParseXML(ctxt, "string(./on_reboot[1])", - &def->onReboot, VIR_DOMAIN_LIFECYCLE_RESTART, - virDomainLifecycleTypeFromString) < 0) + if (virDomainEventActionParseXML(ctxt, "on_reboot", + "string(./on_reboot[1])", + &def->onReboot, + VIR_DOMAIN_LIFECYCLE_RESTART, + virDomainLifecycleTypeFromString) < 0) goto error; - if (virDomainLifecycleParseXML(ctxt, "string(./on_poweroff[1])", - &def->onPoweroff, VIR_DOMAIN_LIFECYCLE_DESTROY, - virDomainLifecycleTypeFromString) < 0) + if (virDomainEventActionParseXML(ctxt, "on_poweroff", + "string(./on_poweroff[1])", + &def->onPoweroff, + VIR_DOMAIN_LIFECYCLE_DESTROY, + virDomainLifecycleTypeFromString) < 0) goto error; - if (virDomainLifecycleParseXML(ctxt, "string(./on_crash[1])", - &def->onCrash, - VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY, - virDomainLifecycleCrashTypeFromString) < 0) + if (virDomainEventActionParseXML(ctxt, "on_crash", + "string(./on_crash[1])", + &def->onCrash, + VIR_DOMAIN_LIFECYCLE_CRASH_DESTROY, + virDomainLifecycleCrashTypeFromString) < 0) goto error; if (virDomainPMStateParseXML(ctxt, @@ -11452,15 +11458,15 @@ virDomainEmulatorPinDel(virDomainDefPtr def) } static int -virDomainLifecycleDefFormat(virBufferPtr buf, - int type, - const char *name, - virLifecycleToStringFunc convFunc) +virDomainEventActionDefFormat(virBufferPtr buf, + int type, + const char *name, + virEventActionToStringFunc convFunc) { const char *typeStr = convFunc(type); if (!typeStr) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("unexpected lifecycle type %d"), type); + _("unexpected %s action: %d"), name, type); return -1; } @@ -13674,17 +13680,17 @@ virDomainDefFormatInternal(virDomainDefPtr def, virBufferAddLit(buf, " \n"); } - if (virDomainLifecycleDefFormat(buf, def->onPoweroff, - "on_poweroff", - virDomainLifecycleTypeToString) < 0) + if (virDomainEventActionDefFormat(buf, def->onPoweroff, + "on_poweroff", + virDomainLifecycleTypeToString) < 0) goto cleanup; - if (virDomainLifecycleDefFormat(buf, def->onReboot, - "on_reboot", - virDomainLifecycleTypeToString) < 0) + if (virDomainEventActionDefFormat(buf, def->onReboot, + "on_reboot", + virDomainLifecycleTypeToString) < 0) goto cleanup; - if (virDomainLifecycleDefFormat(buf, def->onCrash, - "on_crash", - virDomainLifecycleCrashTypeToString) < 0) + if (virDomainEventActionDefFormat(buf, def->onCrash, + "on_crash", + virDomainLifecycleCrashTypeToString) < 0) goto cleanup; if (def->pm.s3 || def->pm.s4) { diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 14dead3e75..0ae6e48e34 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2144,8 +2144,8 @@ virDomainChrDefGetSecurityLabelDef(virDomainChrDefPtr def, const char *model); virSecurityLabelDefPtr virDomainDefAddSecurityLabelDef(virDomainDefPtr def, const char *model); -typedef const char* (*virLifecycleToStringFunc)(int type); -typedef int (*virLifecycleFromStringFunc)(const char *type); +typedef const char* (*virEventActionToStringFunc)(int type); +typedef int (*virEventActionFromStringFunc)(const char *type); VIR_ENUM_DECL(virDomainTaint)