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>
|
domain will be restarted with the same configuration</dd>
|
||||||
</dl>
|
</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>
|
<p>
|
||||||
The <code>on_lockfailure</code> element (<span class="since">since
|
The <code>on_lockfailure</code> element (<span class="since">since
|
||||||
1.0.0</span>) may be used to configure what action should be
|
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 long long threshold,
|
||||||
unsigned int flags);
|
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__ */
|
#endif /* __VIR_LIBVIRT_DOMAIN_H__ */
|
||||||
|
|
|
@ -1791,25 +1791,6 @@ typedef enum {
|
||||||
VIR_DOMAIN_CAPS_FEATURE_LAST
|
VIR_DOMAIN_CAPS_FEATURE_LAST
|
||||||
} virDomainCapsFeature;
|
} 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 {
|
typedef enum {
|
||||||
VIR_DOMAIN_LOCK_FAILURE_DEFAULT,
|
VIR_DOMAIN_LOCK_FAILURE_DEFAULT,
|
||||||
VIR_DOMAIN_LOCK_FAILURE_POWEROFF,
|
VIR_DOMAIN_LOCK_FAILURE_POWEROFF,
|
||||||
|
|
|
@ -1277,6 +1277,12 @@ typedef int
|
||||||
unsigned long long threshold,
|
unsigned long long threshold,
|
||||||
unsigned int flags);
|
unsigned int flags);
|
||||||
|
|
||||||
|
typedef int
|
||||||
|
(*virDrvDomainSetLifecycleAction)(virDomainPtr domain,
|
||||||
|
unsigned int type,
|
||||||
|
unsigned int action,
|
||||||
|
unsigned int flags);
|
||||||
|
|
||||||
|
|
||||||
typedef struct _virHypervisorDriver virHypervisorDriver;
|
typedef struct _virHypervisorDriver virHypervisorDriver;
|
||||||
typedef virHypervisorDriver *virHypervisorDriverPtr;
|
typedef virHypervisorDriver *virHypervisorDriverPtr;
|
||||||
|
@ -1521,6 +1527,7 @@ struct _virHypervisorDriver {
|
||||||
virDrvDomainSetGuestVcpus domainSetGuestVcpus;
|
virDrvDomainSetGuestVcpus domainSetGuestVcpus;
|
||||||
virDrvDomainSetVcpu domainSetVcpu;
|
virDrvDomainSetVcpu domainSetVcpu;
|
||||||
virDrvDomainSetBlockThreshold domainSetBlockThreshold;
|
virDrvDomainSetBlockThreshold domainSetBlockThreshold;
|
||||||
|
virDrvDomainSetLifecycleAction domainSetLifecycleAction;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -12035,3 +12035,59 @@ virDomainSetBlockThreshold(virDomainPtr domain,
|
||||||
virDispatchError(domain->conn);
|
virDispatchError(domain->conn);
|
||||||
return -1;
|
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;
|
virDomainManagedSaveGetXMLDesc;
|
||||||
virDomainManagedSaveDefineXML;
|
virDomainManagedSaveDefineXML;
|
||||||
} LIBVIRT_3.4.0;
|
} LIBVIRT_3.4.0;
|
||||||
|
|
||||||
|
LIBVIRT_3.9.0 {
|
||||||
|
global:
|
||||||
|
virDomainSetLifecycleAction;
|
||||||
|
} LIBVIRT_3.7.0;
|
||||||
# .... define new API here using predicted next version number ....
|
# .... define new API here using predicted next version number ....
|
||||||
|
|
|
@ -8497,6 +8497,7 @@ static virHypervisorDriver hypervisor_driver = {
|
||||||
.domainSetGuestVcpus = remoteDomainSetGuestVcpus, /* 2.0.0 */
|
.domainSetGuestVcpus = remoteDomainSetGuestVcpus, /* 2.0.0 */
|
||||||
.domainSetVcpu = remoteDomainSetVcpu, /* 3.1.0 */
|
.domainSetVcpu = remoteDomainSetVcpu, /* 3.1.0 */
|
||||||
.domainSetBlockThreshold = remoteDomainSetBlockThreshold, /* 3.2.0 */
|
.domainSetBlockThreshold = remoteDomainSetBlockThreshold, /* 3.2.0 */
|
||||||
|
.domainSetLifecycleAction = remoteDomainSetLifecycleAction /* 3.9.0 */
|
||||||
};
|
};
|
||||||
|
|
||||||
static virNetworkDriver network_driver = {
|
static virNetworkDriver network_driver = {
|
||||||
|
|
|
@ -3433,6 +3433,12 @@ struct remote_domain_set_block_threshold_args {
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct remote_domain_set_lifecycle_action_args {
|
||||||
|
remote_nonnull_domain dom;
|
||||||
|
unsigned int type;
|
||||||
|
unsigned int action;
|
||||||
|
unsigned int flags;
|
||||||
|
};
|
||||||
|
|
||||||
/*----- Protocol. -----*/
|
/*----- Protocol. -----*/
|
||||||
|
|
||||||
|
@ -6108,5 +6114,11 @@ enum remote_procedure {
|
||||||
* @acl: domain:write
|
* @acl: domain:write
|
||||||
* @acl: domain:hibernate
|
* @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;
|
uint64_t threshold;
|
||||||
u_int flags;
|
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 {
|
enum remote_procedure {
|
||||||
REMOTE_PROC_CONNECT_OPEN = 1,
|
REMOTE_PROC_CONNECT_OPEN = 1,
|
||||||
REMOTE_PROC_CONNECT_CLOSE = 2,
|
REMOTE_PROC_CONNECT_CLOSE = 2,
|
||||||
|
@ -3255,4 +3261,5 @@ enum remote_procedure {
|
||||||
REMOTE_PROC_DOMAIN_MIGRATE_GET_MAX_DOWNTIME = 387,
|
REMOTE_PROC_DOMAIN_MIGRATE_GET_MAX_DOWNTIME = 387,
|
||||||
REMOTE_PROC_DOMAIN_MANAGED_SAVE_GET_XML_DESC = 388,
|
REMOTE_PROC_DOMAIN_MANAGED_SAVE_GET_XML_DESC = 388,
|
||||||
REMOTE_PROC_DOMAIN_MANAGED_SAVE_DEFINE_XML = 389,
|
REMOTE_PROC_DOMAIN_MANAGED_SAVE_DEFINE_XML = 389,
|
||||||
|
REMOTE_PROC_DOMAIN_SET_LIFECYCLE_ACTION = 390,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue