mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
libvirt: introduce domainCreateWithFlags API
Persistent domain creation needs the same features as transient domains, but virDomainCreate lacks the flags argument present in virDomainCreateXML. virDomainCreateFlags is already claimed as a public enum, so we have to break convention and expose virDomainCreateWithFlags. * include/libvirt/libvirt.h.in (virDomainCreateWithFlags): Add. * src/driver.h (virDrvDomainCreateWithFlags): Internal API. * src/libvirt.c (virDomainCreateWithFlags): Glue public API to driver API. * src/libvirt_public.syms (LIBVIRT_0.8.2): Expose public API. * src/esx/esx_driver.c (esxDriver): Add stub for driver. * src/lxc/lxc_driver.c (lxcDriver): Likewise. * src/opennebula/one_driver.c (oneDriver): Likewise. * src/openvz/openvz_driver.c (openvzDriver): Likewise. * src/phyp/phyp_driver.c (phypDriver): Likewise. * src/qemu/qemu_driver.c (qemuDriver): Likewise. * src/remote/remote_driver.c (remote_driver): Likewise. * src/test/test_driver.c (testDriver): Likewise. * src/uml/uml_driver.c (umlDriver): Likewise. * src/vbox/vbox_tmpl.c (Driver): Likewise. * src/xen/xen_driver.c (xenUnifiedDriver): Likewise. * src/xenapi/xenapi_driver.c (xenapiDriver): Likewise.
This commit is contained in:
parent
fb8552f83a
commit
460ca88b98
@ -799,6 +799,8 @@ int virConnectListDefinedDomains (virConnectPtr conn,
|
|||||||
char **const names,
|
char **const names,
|
||||||
int maxnames);
|
int maxnames);
|
||||||
int virDomainCreate (virDomainPtr domain);
|
int virDomainCreate (virDomainPtr domain);
|
||||||
|
int virDomainCreateWithFlags (virDomainPtr domain,
|
||||||
|
unsigned int flags);
|
||||||
|
|
||||||
int virDomainGetAutostart (virDomainPtr domain,
|
int virDomainGetAutostart (virDomainPtr domain,
|
||||||
int *autostart);
|
int *autostart);
|
||||||
|
@ -161,6 +161,9 @@ typedef int
|
|||||||
(*virDrvNumOfDefinedDomains) (virConnectPtr conn);
|
(*virDrvNumOfDefinedDomains) (virConnectPtr conn);
|
||||||
typedef int
|
typedef int
|
||||||
(*virDrvDomainCreate) (virDomainPtr dom);
|
(*virDrvDomainCreate) (virDomainPtr dom);
|
||||||
|
typedef int
|
||||||
|
(*virDrvDomainCreateWithFlags) (virDomainPtr dom,
|
||||||
|
unsigned int flags);
|
||||||
typedef virDomainPtr
|
typedef virDomainPtr
|
||||||
(*virDrvDomainDefineXML) (virConnectPtr conn,
|
(*virDrvDomainDefineXML) (virConnectPtr conn,
|
||||||
const char *xml);
|
const char *xml);
|
||||||
@ -468,7 +471,7 @@ typedef int
|
|||||||
* - close
|
* - close
|
||||||
*/
|
*/
|
||||||
struct _virDriver {
|
struct _virDriver {
|
||||||
int no; /* the number virDrvNo */
|
int no; /* the number virDrvNo */
|
||||||
const char * name; /* the name of the driver */
|
const char * name; /* the name of the driver */
|
||||||
virDrvOpen open;
|
virDrvOpen open;
|
||||||
virDrvClose close;
|
virDrvClose close;
|
||||||
@ -511,6 +514,7 @@ struct _virDriver {
|
|||||||
virDrvListDefinedDomains listDefinedDomains;
|
virDrvListDefinedDomains listDefinedDomains;
|
||||||
virDrvNumOfDefinedDomains numOfDefinedDomains;
|
virDrvNumOfDefinedDomains numOfDefinedDomains;
|
||||||
virDrvDomainCreate domainCreate;
|
virDrvDomainCreate domainCreate;
|
||||||
|
virDrvDomainCreateWithFlags domainCreateWithFlags;
|
||||||
virDrvDomainDefineXML domainDefineXML;
|
virDrvDomainDefineXML domainDefineXML;
|
||||||
virDrvDomainUndefine domainUndefine;
|
virDrvDomainUndefine domainUndefine;
|
||||||
virDrvDomainAttachDevice domainAttachDevice;
|
virDrvDomainAttachDevice domainAttachDevice;
|
||||||
|
@ -3694,6 +3694,7 @@ static virDriver esxDriver = {
|
|||||||
esxListDefinedDomains, /* listDefinedDomains */
|
esxListDefinedDomains, /* listDefinedDomains */
|
||||||
esxNumberOfDefinedDomains, /* numOfDefinedDomains */
|
esxNumberOfDefinedDomains, /* numOfDefinedDomains */
|
||||||
esxDomainCreate, /* domainCreate */
|
esxDomainCreate, /* domainCreate */
|
||||||
|
NULL, /* domainCreateWithFlags */
|
||||||
esxDomainDefineXML, /* domainDefineXML */
|
esxDomainDefineXML, /* domainDefineXML */
|
||||||
esxDomainUndefine, /* domainUndefine */
|
esxDomainUndefine, /* domainUndefine */
|
||||||
NULL, /* domainAttachDevice */
|
NULL, /* domainAttachDevice */
|
||||||
|
@ -4878,7 +4878,7 @@ error:
|
|||||||
* virDomainCreate:
|
* virDomainCreate:
|
||||||
* @domain: pointer to a defined domain
|
* @domain: pointer to a defined domain
|
||||||
*
|
*
|
||||||
* launch a defined domain. If the call succeed the domain moves from the
|
* Launch a defined domain. If the call succeeds the domain moves from the
|
||||||
* defined to the running domains pools.
|
* defined to the running domains pools.
|
||||||
*
|
*
|
||||||
* Returns 0 in case of success, -1 in case of error
|
* Returns 0 in case of success, -1 in case of error
|
||||||
@ -4916,6 +4916,49 @@ error:
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virDomainCreateWithFlags:
|
||||||
|
* @domain: pointer to a defined domain
|
||||||
|
* @flags: bitwise-or of supported virDomainCreateFlags
|
||||||
|
*
|
||||||
|
* Launch a defined domain. If the call succeeds the domain moves from the
|
||||||
|
* defined to the running domains pools.
|
||||||
|
*
|
||||||
|
* Returns 0 in case of success, -1 in case of error
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
virDomainCreateWithFlags(virDomainPtr domain, unsigned int flags) {
|
||||||
|
virConnectPtr conn;
|
||||||
|
DEBUG("domain=%p, flags=%d", domain, flags);
|
||||||
|
|
||||||
|
virResetLastError();
|
||||||
|
|
||||||
|
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
|
||||||
|
virLibDomainError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
|
||||||
|
virDispatchError(NULL);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
conn = domain->conn;
|
||||||
|
if (conn->flags & VIR_CONNECT_RO) {
|
||||||
|
virLibDomainError(domain, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (conn->driver->domainCreateWithFlags) {
|
||||||
|
int ret;
|
||||||
|
ret = conn->driver->domainCreateWithFlags (domain, flags);
|
||||||
|
if (ret < 0)
|
||||||
|
goto error;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
virLibConnError (conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
|
||||||
|
|
||||||
|
error:
|
||||||
|
virDispatchError(domain->conn);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* virDomainGetAutostart:
|
* virDomainGetAutostart:
|
||||||
* @domain: a domain object
|
* @domain: a domain object
|
||||||
|
@ -399,4 +399,10 @@ LIBVIRT_0.8.1 {
|
|||||||
virDomainGetBlockInfo;
|
virDomainGetBlockInfo;
|
||||||
} LIBVIRT_0.8.0;
|
} LIBVIRT_0.8.0;
|
||||||
|
|
||||||
|
|
||||||
|
LIBVIRT_0.8.2 {
|
||||||
|
global:
|
||||||
|
virDomainCreateWithFlags;
|
||||||
|
} LIBVIRT_0.8.1;
|
||||||
|
|
||||||
# .... define new API here using predicted next version number ....
|
# .... define new API here using predicted next version number ....
|
||||||
|
@ -2557,6 +2557,7 @@ static virDriver lxcDriver = {
|
|||||||
lxcListDefinedDomains, /* listDefinedDomains */
|
lxcListDefinedDomains, /* listDefinedDomains */
|
||||||
lxcNumDefinedDomains, /* numOfDefinedDomains */
|
lxcNumDefinedDomains, /* numOfDefinedDomains */
|
||||||
lxcDomainStart, /* domainCreate */
|
lxcDomainStart, /* domainCreate */
|
||||||
|
NULL, /* domainCreateWithFlags */
|
||||||
lxcDomainDefine, /* domainDefineXML */
|
lxcDomainDefine, /* domainDefineXML */
|
||||||
lxcDomainUndefine, /* domainUndefine */
|
lxcDomainUndefine, /* domainUndefine */
|
||||||
NULL, /* domainAttachDevice */
|
NULL, /* domainAttachDevice */
|
||||||
|
@ -755,6 +755,7 @@ static virDriver oneDriver = {
|
|||||||
oneListDefinedDomains, /* listDefinedDomains */
|
oneListDefinedDomains, /* listDefinedDomains */
|
||||||
oneNumDefinedDomains, /* numOfDefinedDomains */
|
oneNumDefinedDomains, /* numOfDefinedDomains */
|
||||||
oneDomainStart, /* domainCreate */
|
oneDomainStart, /* domainCreate */
|
||||||
|
NULL, /* domainCreateWithFlags */
|
||||||
oneDomainDefine, /* domainDefineXML */
|
oneDomainDefine, /* domainDefineXML */
|
||||||
oneDomainUndefine, /* domainUndefine */
|
oneDomainUndefine, /* domainUndefine */
|
||||||
NULL, /* domainAttachDevice */
|
NULL, /* domainAttachDevice */
|
||||||
|
@ -1507,6 +1507,7 @@ static virDriver openvzDriver = {
|
|||||||
openvzListDefinedDomains, /* listDefinedDomains */
|
openvzListDefinedDomains, /* listDefinedDomains */
|
||||||
openvzNumDefinedDomains, /* numOfDefinedDomains */
|
openvzNumDefinedDomains, /* numOfDefinedDomains */
|
||||||
openvzDomainCreate, /* domainCreate */
|
openvzDomainCreate, /* domainCreate */
|
||||||
|
NULL, /* domainCreateWithFlags */
|
||||||
openvzDomainDefineXML, /* domainDefineXML */
|
openvzDomainDefineXML, /* domainDefineXML */
|
||||||
openvzDomainUndefine, /* domainUndefine */
|
openvzDomainUndefine, /* domainUndefine */
|
||||||
NULL, /* domainAttachDevice */
|
NULL, /* domainAttachDevice */
|
||||||
|
@ -1609,6 +1609,7 @@ virDriver phypDriver = {
|
|||||||
phypListDefinedDomains, /* listDefinedDomains */
|
phypListDefinedDomains, /* listDefinedDomains */
|
||||||
phypNumDefinedDomains, /* numOfDefinedDomains */
|
phypNumDefinedDomains, /* numOfDefinedDomains */
|
||||||
NULL, /* domainCreate */
|
NULL, /* domainCreate */
|
||||||
|
NULL, /* domainCreateWithFlags */
|
||||||
NULL, /* domainDefineXML */
|
NULL, /* domainDefineXML */
|
||||||
NULL, /* domainUndefine */
|
NULL, /* domainUndefine */
|
||||||
NULL, /* domainAttachDevice */
|
NULL, /* domainAttachDevice */
|
||||||
|
@ -12195,6 +12195,7 @@ static virDriver qemuDriver = {
|
|||||||
qemudListDefinedDomains, /* listDefinedDomains */
|
qemudListDefinedDomains, /* listDefinedDomains */
|
||||||
qemudNumDefinedDomains, /* numOfDefinedDomains */
|
qemudNumDefinedDomains, /* numOfDefinedDomains */
|
||||||
qemudDomainStart, /* domainCreate */
|
qemudDomainStart, /* domainCreate */
|
||||||
|
NULL, /* domainCreateWithFlags */
|
||||||
qemudDomainDefine, /* domainDefineXML */
|
qemudDomainDefine, /* domainDefineXML */
|
||||||
qemudDomainUndefine, /* domainUndefine */
|
qemudDomainUndefine, /* domainUndefine */
|
||||||
qemudDomainAttachDevice, /* domainAttachDevice */
|
qemudDomainAttachDevice, /* domainAttachDevice */
|
||||||
|
@ -10215,6 +10215,7 @@ static virDriver remote_driver = {
|
|||||||
remoteListDefinedDomains, /* listDefinedDomains */
|
remoteListDefinedDomains, /* listDefinedDomains */
|
||||||
remoteNumOfDefinedDomains, /* numOfDefinedDomains */
|
remoteNumOfDefinedDomains, /* numOfDefinedDomains */
|
||||||
remoteDomainCreate, /* domainCreate */
|
remoteDomainCreate, /* domainCreate */
|
||||||
|
NULL, /* domainCreateWithFlags */
|
||||||
remoteDomainDefineXML, /* domainDefineXML */
|
remoteDomainDefineXML, /* domainDefineXML */
|
||||||
remoteDomainUndefine, /* domainUndefine */
|
remoteDomainUndefine, /* domainUndefine */
|
||||||
remoteDomainAttachDevice, /* domainAttachDevice */
|
remoteDomainAttachDevice, /* domainAttachDevice */
|
||||||
|
@ -5261,6 +5261,7 @@ static virDriver testDriver = {
|
|||||||
testListDefinedDomains, /* listDefinedDomains */
|
testListDefinedDomains, /* listDefinedDomains */
|
||||||
testNumOfDefinedDomains, /* numOfDefinedDomains */
|
testNumOfDefinedDomains, /* numOfDefinedDomains */
|
||||||
testDomainCreate, /* domainCreate */
|
testDomainCreate, /* domainCreate */
|
||||||
|
NULL, /* domainCreateWithFlags */
|
||||||
testDomainDefineXML, /* domainDefineXML */
|
testDomainDefineXML, /* domainDefineXML */
|
||||||
testDomainUndefine, /* domainUndefine */
|
testDomainUndefine, /* domainUndefine */
|
||||||
NULL, /* domainAttachDevice */
|
NULL, /* domainAttachDevice */
|
||||||
|
@ -1892,6 +1892,7 @@ static virDriver umlDriver = {
|
|||||||
umlListDefinedDomains, /* listDefinedDomains */
|
umlListDefinedDomains, /* listDefinedDomains */
|
||||||
umlNumDefinedDomains, /* numOfDefinedDomains */
|
umlNumDefinedDomains, /* numOfDefinedDomains */
|
||||||
umlDomainStart, /* domainCreate */
|
umlDomainStart, /* domainCreate */
|
||||||
|
NULL, /* domainCreateWithFlags */
|
||||||
umlDomainDefine, /* domainDefineXML */
|
umlDomainDefine, /* domainDefineXML */
|
||||||
umlDomainUndefine, /* domainUndefine */
|
umlDomainUndefine, /* domainUndefine */
|
||||||
NULL, /* domainAttachDevice */
|
NULL, /* domainAttachDevice */
|
||||||
|
@ -8177,6 +8177,7 @@ virDriver NAME(Driver) = {
|
|||||||
vboxListDefinedDomains, /* listDefinedDomains */
|
vboxListDefinedDomains, /* listDefinedDomains */
|
||||||
vboxNumOfDefinedDomains, /* numOfDefinedDomains */
|
vboxNumOfDefinedDomains, /* numOfDefinedDomains */
|
||||||
vboxDomainCreate, /* domainCreate */
|
vboxDomainCreate, /* domainCreate */
|
||||||
|
NULL, /* domainCreateWithFlags */
|
||||||
vboxDomainDefineXML, /* domainDefineXML */
|
vboxDomainDefineXML, /* domainDefineXML */
|
||||||
vboxDomainUndefine, /* domainUndefine */
|
vboxDomainUndefine, /* domainUndefine */
|
||||||
vboxDomainAttachDevice, /* domainAttachDevice */
|
vboxDomainAttachDevice, /* domainAttachDevice */
|
||||||
|
@ -1941,6 +1941,7 @@ static virDriver xenUnifiedDriver = {
|
|||||||
xenUnifiedListDefinedDomains, /* listDefinedDomains */
|
xenUnifiedListDefinedDomains, /* listDefinedDomains */
|
||||||
xenUnifiedNumOfDefinedDomains, /* numOfDefinedDomains */
|
xenUnifiedNumOfDefinedDomains, /* numOfDefinedDomains */
|
||||||
xenUnifiedDomainCreate, /* domainCreate */
|
xenUnifiedDomainCreate, /* domainCreate */
|
||||||
|
NULL, /* domainCreateWithFlags */
|
||||||
xenUnifiedDomainDefineXML, /* domainDefineXML */
|
xenUnifiedDomainDefineXML, /* domainDefineXML */
|
||||||
xenUnifiedDomainUndefine, /* domainUndefine */
|
xenUnifiedDomainUndefine, /* domainUndefine */
|
||||||
xenUnifiedDomainAttachDevice, /* domainAttachDevice */
|
xenUnifiedDomainAttachDevice, /* domainAttachDevice */
|
||||||
|
@ -1744,6 +1744,7 @@ static virDriver xenapiDriver = {
|
|||||||
xenapiListDefinedDomains, /* listDefinedDomains */
|
xenapiListDefinedDomains, /* listDefinedDomains */
|
||||||
xenapiNumOfDefinedDomains, /* numOfDefinedDomains */
|
xenapiNumOfDefinedDomains, /* numOfDefinedDomains */
|
||||||
xenapiDomainCreate, /* domainCreate */
|
xenapiDomainCreate, /* domainCreate */
|
||||||
|
NULL, /* domainCreateWithFlags */
|
||||||
xenapiDomainDefineXML, /* domainDefineXML */
|
xenapiDomainDefineXML, /* domainDefineXML */
|
||||||
xenapiDomainUndefine, /* domainUndefine */
|
xenapiDomainUndefine, /* domainUndefine */
|
||||||
NULL, /* domainAttachDevice */
|
NULL, /* domainAttachDevice */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user