mirror of https://gitee.com/openkylin/libvirt.git
lib: introduce virDomainSetLifecycleAction() API
Reviewed-by: John Ferlan <jferlan@redhat.com> Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
parent
17f1a647a0
commit
1a2f34e363
|
@ -1622,6 +1622,13 @@
|
|||
domain will be restarted with the same configuration</dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
<span class="since">Since 3.9.0</span>, the lifecycle events can
|
||||
be configured via the
|
||||
<a href="html/libvirt-libvirt-domain.html#virDomainSetLifecycleAction">
|
||||
<code>virDomainSetLifecycleAction</code></a> API.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The <code>on_lockfailure</code> element (<span class="since">since
|
||||
1.0.0</span>) may be used to configure what action should be
|
||||
|
|
|
@ -4728,4 +4728,32 @@ int virDomainSetBlockThreshold(virDomainPtr domain,
|
|||
unsigned long long threshold,
|
||||
unsigned int flags);
|
||||
|
||||
typedef enum {
|
||||
VIR_DOMAIN_LIFECYCLE_POWEROFF = 0,
|
||||
VIR_DOMAIN_LIFECYCLE_REBOOT = 1,
|
||||
VIR_DOMAIN_LIFECYCLE_CRASH = 2,
|
||||
|
||||
# ifdef VIR_ENUM_SENTINELS
|
||||
VIR_DOMAIN_LIFECYCLE_LAST
|
||||
# endif
|
||||
} virDomainLifecycle;
|
||||
|
||||
typedef enum {
|
||||
VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY = 0,
|
||||
VIR_DOMAIN_LIFECYCLE_ACTION_RESTART = 1,
|
||||
VIR_DOMAIN_LIFECYCLE_ACTION_RESTART_RENAME = 2,
|
||||
VIR_DOMAIN_LIFECYCLE_ACTION_PRESERVE = 3,
|
||||
VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY = 4,
|
||||
VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART = 5,
|
||||
|
||||
# ifdef VIR_ENUM_SENTINELS
|
||||
VIR_DOMAIN_LIFECYCLE_ACTION_LAST
|
||||
# endif
|
||||
} virDomainLifecycleAction;
|
||||
|
||||
int virDomainSetLifecycleAction(virDomainPtr domain,
|
||||
unsigned int type,
|
||||
unsigned int action,
|
||||
unsigned int flags);
|
||||
|
||||
#endif /* __VIR_LIBVIRT_DOMAIN_H__ */
|
||||
|
|
|
@ -1791,25 +1791,6 @@ typedef enum {
|
|||
VIR_DOMAIN_CAPS_FEATURE_LAST
|
||||
} virDomainCapsFeature;
|
||||
|
||||
typedef enum {
|
||||
VIR_DOMAIN_LIFECYCLE_POWEROFF,
|
||||
VIR_DOMAIN_LIFECYCLE_REBOOT,
|
||||
VIR_DOMAIN_LIFECYCLE_CRASH,
|
||||
|
||||
VIR_DOMAIN_LIFECYCLE_LAST
|
||||
} virDomainLifecycle;
|
||||
|
||||
typedef enum {
|
||||
VIR_DOMAIN_LIFECYCLE_ACTION_DESTROY,
|
||||
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_LOCK_FAILURE_DEFAULT,
|
||||
VIR_DOMAIN_LOCK_FAILURE_POWEROFF,
|
||||
|
|
|
@ -1277,6 +1277,12 @@ typedef int
|
|||
unsigned long long threshold,
|
||||
unsigned int flags);
|
||||
|
||||
typedef int
|
||||
(*virDrvDomainSetLifecycleAction)(virDomainPtr domain,
|
||||
unsigned int type,
|
||||
unsigned int action,
|
||||
unsigned int flags);
|
||||
|
||||
|
||||
typedef struct _virHypervisorDriver virHypervisorDriver;
|
||||
typedef virHypervisorDriver *virHypervisorDriverPtr;
|
||||
|
@ -1521,6 +1527,7 @@ struct _virHypervisorDriver {
|
|||
virDrvDomainSetGuestVcpus domainSetGuestVcpus;
|
||||
virDrvDomainSetVcpu domainSetVcpu;
|
||||
virDrvDomainSetBlockThreshold domainSetBlockThreshold;
|
||||
virDrvDomainSetLifecycleAction domainSetLifecycleAction;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -12035,3 +12035,59 @@ virDomainSetBlockThreshold(virDomainPtr domain,
|
|||
virDispatchError(domain->conn);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* virDomainSetLifecycleAction:
|
||||
* @domain: pointer to domain object
|
||||
* @type: the lifecycle type from virDomainLifecycle
|
||||
* @action: the action type from virDomainLifecycleAction
|
||||
* @flags: bitwise-OR of virDomainModificationImpact
|
||||
*
|
||||
* Changes the actions of lifecycle events for domain represented as
|
||||
* <on_$type>$action</on_$type> in the domain XML.
|
||||
*
|
||||
* Returns 0 on success, -1 on failure.
|
||||
*/
|
||||
int virDomainSetLifecycleAction(virDomainPtr domain,
|
||||
unsigned int type,
|
||||
unsigned int action,
|
||||
unsigned int flags)
|
||||
{
|
||||
VIR_DOMAIN_DEBUG(domain, "type='%u' action='%u' flags='0x%x'",
|
||||
type, action, flags);
|
||||
|
||||
virResetLastError();
|
||||
|
||||
virCheckDomainReturn(domain, -1);
|
||||
virCheckReadOnlyGoto(domain->conn->flags, error);
|
||||
|
||||
if (type >= VIR_DOMAIN_LIFECYCLE_LAST) {
|
||||
virReportError(VIR_ERR_INVALID_ARG,
|
||||
_("invalid lifecycle type '%u'"), type);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (action >= VIR_DOMAIN_LIFECYCLE_ACTION_LAST) {
|
||||
virReportError(VIR_ERR_INVALID_ARG,
|
||||
_("invalid lifecycle action '%u'"), action);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (domain->conn->driver->domainSetLifecycleAction) {
|
||||
int ret;
|
||||
ret = domain->conn->driver->domainSetLifecycleAction(domain,
|
||||
type,
|
||||
action,
|
||||
flags);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
return ret;
|
||||
}
|
||||
|
||||
virReportUnsupportedError();
|
||||
|
||||
error:
|
||||
virDispatchError(domain->conn);
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -774,4 +774,9 @@ LIBVIRT_3.7.0 {
|
|||
virDomainManagedSaveGetXMLDesc;
|
||||
virDomainManagedSaveDefineXML;
|
||||
} LIBVIRT_3.4.0;
|
||||
|
||||
LIBVIRT_3.9.0 {
|
||||
global:
|
||||
virDomainSetLifecycleAction;
|
||||
} LIBVIRT_3.7.0;
|
||||
# .... define new API here using predicted next version number ....
|
||||
|
|
|
@ -8497,6 +8497,7 @@ static virHypervisorDriver hypervisor_driver = {
|
|||
.domainSetGuestVcpus = remoteDomainSetGuestVcpus, /* 2.0.0 */
|
||||
.domainSetVcpu = remoteDomainSetVcpu, /* 3.1.0 */
|
||||
.domainSetBlockThreshold = remoteDomainSetBlockThreshold, /* 3.2.0 */
|
||||
.domainSetLifecycleAction = remoteDomainSetLifecycleAction /* 3.9.0 */
|
||||
};
|
||||
|
||||
static virNetworkDriver network_driver = {
|
||||
|
|
|
@ -3433,6 +3433,12 @@ struct remote_domain_set_block_threshold_args {
|
|||
unsigned int flags;
|
||||
};
|
||||
|
||||
struct remote_domain_set_lifecycle_action_args {
|
||||
remote_nonnull_domain dom;
|
||||
unsigned int type;
|
||||
unsigned int action;
|
||||
unsigned int flags;
|
||||
};
|
||||
|
||||
/*----- Protocol. -----*/
|
||||
|
||||
|
@ -6108,5 +6114,11 @@ enum remote_procedure {
|
|||
* @acl: domain:write
|
||||
* @acl: domain:hibernate
|
||||
*/
|
||||
REMOTE_PROC_DOMAIN_MANAGED_SAVE_DEFINE_XML = 389
|
||||
REMOTE_PROC_DOMAIN_MANAGED_SAVE_DEFINE_XML = 389,
|
||||
|
||||
/**
|
||||
* @generate: both
|
||||
* @acl: domain:write
|
||||
*/
|
||||
REMOTE_PROC_DOMAIN_SET_LIFECYCLE_ACTION = 390
|
||||
};
|
||||
|
|
|
@ -2865,6 +2865,12 @@ struct remote_domain_set_block_threshold_args {
|
|||
uint64_t threshold;
|
||||
u_int flags;
|
||||
};
|
||||
struct remote_domain_set_lifecycle_action_args {
|
||||
remote_nonnull_domain dom;
|
||||
u_int type;
|
||||
u_int action;
|
||||
u_int flags;
|
||||
};
|
||||
enum remote_procedure {
|
||||
REMOTE_PROC_CONNECT_OPEN = 1,
|
||||
REMOTE_PROC_CONNECT_CLOSE = 2,
|
||||
|
@ -3255,4 +3261,5 @@ enum remote_procedure {
|
|||
REMOTE_PROC_DOMAIN_MIGRATE_GET_MAX_DOWNTIME = 387,
|
||||
REMOTE_PROC_DOMAIN_MANAGED_SAVE_GET_XML_DESC = 388,
|
||||
REMOTE_PROC_DOMAIN_MANAGED_SAVE_DEFINE_XML = 389,
|
||||
REMOTE_PROC_DOMAIN_SET_LIFECYCLE_ACTION = 390,
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue