drivers: add virDomainCreateWithFlags if virDomainCreate exists

* src/esx/esx_driver.c (esxDomainCreate): Move guts...
(esxDomainCreateWithFlags): ...to new function.
(esxDriver): Trivially support the new API.
* src/lxc/lxc_driver.c (lxcDomainStart, lxcDomainStartWithFlags)
(lxcDriver): Likewise.
* src/opennebula/one_driver.c (oneDomainStart)
(oneDomainStartWithFlags, oneDriver): Likewise.
* src/openvz/openvz_driver.c (openvzDomainCreate)
(openvzDomainCreateWithFlags, openvzDriver): Likewise.
* src/qemu/qemu_driver.c (qemudDomainStart)
(qemudDomainStartWithFlags, qemuDriver): Likewise.
* src/test/test_driver.c (testDomainCreate)
(testDomainCreateWithFlags, testDriver): Likewise.
* src/uml/uml_driver.c (umlDomainStart, umlDomainStartWithFlags)
(umlDriver): Likewise.
* src/vbox/vbox_tmpl.c (vboxDomainCreate)
(vboxDomainCreateWithFlags, Driver): Likewise.
* src/xen/xen_driver.c (xenUnifiedDomainCreate)
(xenUnifiedDomainCreateWithFlags, xenUnifiedDriver): Likewise.
* src/xenapi/xenapi_driver.c (xenapiDomainCreate)
(xenapiDomainCreateWithFlags, xenapiDriver): Likewise.
This commit is contained in:
Eric Blake 2010-06-10 09:55:36 -06:00
parent 6c83e7ca6f
commit de3aadaa71
10 changed files with 111 additions and 23 deletions

View File

@ -2345,7 +2345,7 @@ esxNumberOfDefinedDomains(virConnectPtr conn)
static int static int
esxDomainCreate(virDomainPtr domain) esxDomainCreateWithFlags(virDomainPtr domain, unsigned int flags)
{ {
int result = -1; int result = -1;
esxPrivate *priv = domain->conn->privateData; esxPrivate *priv = domain->conn->privateData;
@ -2355,6 +2355,8 @@ esxDomainCreate(virDomainPtr domain)
esxVI_ManagedObjectReference *task = NULL; esxVI_ManagedObjectReference *task = NULL;
esxVI_TaskInfoState taskInfoState; esxVI_TaskInfoState taskInfoState;
virCheckFlags(0, -1);
if (esxVI_EnsureSession(priv->host) < 0) { if (esxVI_EnsureSession(priv->host) < 0) {
return -1; return -1;
} }
@ -2397,7 +2399,11 @@ esxDomainCreate(virDomainPtr domain)
return result; return result;
} }
static int
esxDomainCreate(virDomainPtr domain)
{
return esxDomainCreateWithFlags(domain, 0);
}
static virDomainPtr static virDomainPtr
esxDomainDefineXML(virConnectPtr conn, const char *xml ATTRIBUTE_UNUSED) esxDomainDefineXML(virConnectPtr conn, const char *xml ATTRIBUTE_UNUSED)
@ -3694,7 +3700,7 @@ static virDriver esxDriver = {
esxListDefinedDomains, /* listDefinedDomains */ esxListDefinedDomains, /* listDefinedDomains */
esxNumberOfDefinedDomains, /* numOfDefinedDomains */ esxNumberOfDefinedDomains, /* numOfDefinedDomains */
esxDomainCreate, /* domainCreate */ esxDomainCreate, /* domainCreate */
NULL, /* domainCreateWithFlags */ esxDomainCreateWithFlags, /* domainCreateWithFlags */
esxDomainDefineXML, /* domainDefineXML */ esxDomainDefineXML, /* domainDefineXML */
esxDomainUndefine, /* domainUndefine */ esxDomainUndefine, /* domainUndefine */
NULL, /* domainAttachDevice */ NULL, /* domainAttachDevice */

View File

@ -1349,20 +1349,23 @@ cleanup:
} }
/** /**
* lxcDomainStart: * lxcDomainStartWithFlags:
* @dom: domain to start * @dom: domain to start
* @flags: Must be 0 for now
* *
* Looks up domain and starts it. * Looks up domain and starts it.
* *
* Returns 0 on success or -1 in case of error * Returns 0 on success or -1 in case of error
*/ */
static int lxcDomainStart(virDomainPtr dom) static int lxcDomainStartWithFlags(virDomainPtr dom, unsigned int flags)
{ {
lxc_driver_t *driver = dom->conn->privateData; lxc_driver_t *driver = dom->conn->privateData;
virDomainObjPtr vm; virDomainObjPtr vm;
virDomainEventPtr event = NULL; virDomainEventPtr event = NULL;
int ret = -1; int ret = -1;
virCheckFlags(0, -1);
lxcDriverLock(driver); lxcDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid); vm = virDomainFindByUUID(&driver->domains, dom->uuid);
if (!vm) { if (!vm) {
@ -1401,6 +1404,19 @@ cleanup:
return ret; return ret;
} }
/**
* lxcDomainStart:
* @dom: domain to start
*
* Looks up domain and starts it.
*
* Returns 0 on success or -1 in case of error
*/
static int lxcDomainStart(virDomainPtr dom)
{
return lxcDomainStartWithFlags(dom, 0);
}
/** /**
* lxcDomainCreateAndStart: * lxcDomainCreateAndStart:
* @conn: pointer to connection * @conn: pointer to connection
@ -2557,7 +2573,7 @@ static virDriver lxcDriver = {
lxcListDefinedDomains, /* listDefinedDomains */ lxcListDefinedDomains, /* listDefinedDomains */
lxcNumDefinedDomains, /* numOfDefinedDomains */ lxcNumDefinedDomains, /* numOfDefinedDomains */
lxcDomainStart, /* domainCreate */ lxcDomainStart, /* domainCreate */
NULL, /* domainCreateWithFlags */ lxcDomainStartWithFlags, /* domainCreateWithFlags */
lxcDomainDefine, /* domainDefineXML */ lxcDomainDefine, /* domainDefineXML */
lxcDomainUndefine, /* domainUndefine */ lxcDomainUndefine, /* domainUndefine */
NULL, /* domainAttachDevice */ NULL, /* domainAttachDevice */

View File

@ -402,7 +402,7 @@ cleanup:
return ret; return ret;
} }
static int oneDomainStart(virDomainPtr dom) static int oneDomainStartWithFlags(virDomainPtr dom, unsigned int flags)
{ {
virConnectPtr conn = dom->conn; virConnectPtr conn = dom->conn;
one_driver_t *driver = conn->privateData; one_driver_t *driver = conn->privateData;
@ -410,6 +410,8 @@ static int oneDomainStart(virDomainPtr dom)
int ret = -1; int ret = -1;
int oneid; int oneid;
virCheckFlags(0, -1);
oneDriverLock(driver); oneDriverLock(driver);
vm = virDomainFindByName(&driver->domains, dom->name); vm = virDomainFindByName(&driver->domains, dom->name);
@ -434,6 +436,11 @@ return_point:
return ret; return ret;
} }
static int oneDomainStart(virDomainPtr dom)
{
return oneDomainStartWithFlags(dom, 0);
}
static virDomainPtr static virDomainPtr
oneDomainCreateAndStart(virConnectPtr conn, oneDomainCreateAndStart(virConnectPtr conn,
const char *xml, const char *xml,
@ -755,7 +762,7 @@ static virDriver oneDriver = {
oneListDefinedDomains, /* listDefinedDomains */ oneListDefinedDomains, /* listDefinedDomains */
oneNumDefinedDomains, /* numOfDefinedDomains */ oneNumDefinedDomains, /* numOfDefinedDomains */
oneDomainStart, /* domainCreate */ oneDomainStart, /* domainCreate */
NULL, /* domainCreateWithFlags */ oneDomainStartWithFlags, /* domainCreateWithFlags */
oneDomainDefine, /* domainDefineXML */ oneDomainDefine, /* domainDefineXML */
oneDomainUndefine, /* domainUndefine */ oneDomainUndefine, /* domainUndefine */
NULL, /* domainAttachDevice */ NULL, /* domainAttachDevice */

View File

@ -958,13 +958,15 @@ cleanup:
} }
static int static int
openvzDomainCreate(virDomainPtr dom) openvzDomainCreateWithFlags(virDomainPtr dom, unsigned int flags)
{ {
struct openvz_driver *driver = dom->conn->privateData; struct openvz_driver *driver = dom->conn->privateData;
virDomainObjPtr vm; virDomainObjPtr vm;
const char *prog[] = {VZCTL, "--quiet", "start", PROGRAM_SENTINAL, NULL }; const char *prog[] = {VZCTL, "--quiet", "start", PROGRAM_SENTINAL, NULL };
int ret = -1; int ret = -1;
virCheckFlags(0, -1);
openvzDriverLock(driver); openvzDriverLock(driver);
vm = virDomainFindByName(&driver->domains, dom->name); vm = virDomainFindByName(&driver->domains, dom->name);
openvzDriverUnlock(driver); openvzDriverUnlock(driver);
@ -999,6 +1001,12 @@ cleanup:
return ret; return ret;
} }
static int
openvzDomainCreate(virDomainPtr dom)
{
return openvzDomainCreateWithFlags(dom, 0);
}
static int static int
openvzDomainUndefine(virDomainPtr dom) openvzDomainUndefine(virDomainPtr dom)
{ {
@ -1507,7 +1515,7 @@ static virDriver openvzDriver = {
openvzListDefinedDomains, /* listDefinedDomains */ openvzListDefinedDomains, /* listDefinedDomains */
openvzNumDefinedDomains, /* numOfDefinedDomains */ openvzNumDefinedDomains, /* numOfDefinedDomains */
openvzDomainCreate, /* domainCreate */ openvzDomainCreate, /* domainCreate */
NULL, /* domainCreateWithFlags */ openvzDomainCreateWithFlags, /* domainCreateWithFlags */
openvzDomainDefineXML, /* domainDefineXML */ openvzDomainDefineXML, /* domainDefineXML */
openvzDomainUndefine, /* domainUndefine */ openvzDomainUndefine, /* domainUndefine */
NULL, /* domainAttachDevice */ NULL, /* domainAttachDevice */

View File

@ -6721,11 +6721,16 @@ cleanup:
return ret; return ret;
} }
static int qemudDomainStart(virDomainPtr dom) { static int
qemudDomainStartWithFlags(virDomainPtr dom, unsigned int flags)
{
struct qemud_driver *driver = dom->conn->privateData; struct qemud_driver *driver = dom->conn->privateData;
virDomainObjPtr vm; virDomainObjPtr vm;
int ret = -1; int ret = -1;
/* XXX: Support VIR_DOMAIN_START_PAUSED */
virCheckFlags(0, -1);
qemuDriverLock(driver); qemuDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid); vm = virDomainFindByUUID(&driver->domains, dom->uuid);
@ -6759,6 +6764,12 @@ cleanup:
return ret; return ret;
} }
static int
qemudDomainStart(virDomainPtr dom)
{
return qemudDomainStartWithFlags(dom, 0);
}
static int static int
qemudCanonicalizeMachineFromInfo(virDomainDefPtr def, qemudCanonicalizeMachineFromInfo(virDomainDefPtr def,
virCapsGuestDomainInfoPtr info, virCapsGuestDomainInfoPtr info,
@ -12195,7 +12206,7 @@ static virDriver qemuDriver = {
qemudListDefinedDomains, /* listDefinedDomains */ qemudListDefinedDomains, /* listDefinedDomains */
qemudNumDefinedDomains, /* numOfDefinedDomains */ qemudNumDefinedDomains, /* numOfDefinedDomains */
qemudDomainStart, /* domainCreate */ qemudDomainStart, /* domainCreate */
NULL, /* domainCreateWithFlags */ qemudDomainStartWithFlags, /* domainCreateWithFlags */
qemudDomainDefine, /* domainDefineXML */ qemudDomainDefine, /* domainDefineXML */
qemudDomainUndefine, /* domainUndefine */ qemudDomainUndefine, /* domainUndefine */
qemudDomainAttachDevice, /* domainAttachDevice */ qemudDomainAttachDevice, /* domainAttachDevice */

View File

@ -2350,12 +2350,14 @@ cleanup:
} }
static int testDomainCreate(virDomainPtr domain) { static int testDomainCreateWithFlags(virDomainPtr domain, unsigned int flags) {
testConnPtr privconn = domain->conn->privateData; testConnPtr privconn = domain->conn->privateData;
virDomainObjPtr privdom; virDomainObjPtr privdom;
virDomainEventPtr event = NULL; virDomainEventPtr event = NULL;
int ret = -1; int ret = -1;
virCheckFlags(0, -1);
testDriverLock(privconn); testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains, privdom = virDomainFindByName(&privconn->domains,
domain->name); domain->name);
@ -2389,6 +2391,10 @@ cleanup:
return ret; return ret;
} }
static int testDomainCreate(virDomainPtr domain) {
return testDomainCreateWithFlags(domain, 0);
}
static int testDomainUndefine(virDomainPtr domain) { static int testDomainUndefine(virDomainPtr domain) {
testConnPtr privconn = domain->conn->privateData; testConnPtr privconn = domain->conn->privateData;
virDomainObjPtr privdom; virDomainObjPtr privdom;
@ -5261,7 +5267,7 @@ static virDriver testDriver = {
testListDefinedDomains, /* listDefinedDomains */ testListDefinedDomains, /* listDefinedDomains */
testNumOfDefinedDomains, /* numOfDefinedDomains */ testNumOfDefinedDomains, /* numOfDefinedDomains */
testDomainCreate, /* domainCreate */ testDomainCreate, /* domainCreate */
NULL, /* domainCreateWithFlags */ testDomainCreateWithFlags, /* domainCreateWithFlags */
testDomainDefineXML, /* domainDefineXML */ testDomainDefineXML, /* domainDefineXML */
testDomainUndefine, /* domainUndefine */ testDomainUndefine, /* domainUndefine */
NULL, /* domainAttachDevice */ NULL, /* domainAttachDevice */

View File

@ -1576,11 +1576,13 @@ static int umlNumDefinedDomains(virConnectPtr conn) {
} }
static int umlDomainStart(virDomainPtr dom) { static int umlDomainStartWithFlags(virDomainPtr dom, unsigned int flags) {
struct uml_driver *driver = dom->conn->privateData; struct uml_driver *driver = dom->conn->privateData;
virDomainObjPtr vm; virDomainObjPtr vm;
int ret = -1; int ret = -1;
virCheckFlags(0, -1);
umlDriverLock(driver); umlDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid); vm = virDomainFindByUUID(&driver->domains, dom->uuid);
@ -1599,6 +1601,9 @@ cleanup:
return ret; return ret;
} }
static int umlDomainStart(virDomainPtr dom) {
return umlDomainStartWithFlags(dom, 0);
}
static virDomainPtr umlDomainDefine(virConnectPtr conn, const char *xml) { static virDomainPtr umlDomainDefine(virConnectPtr conn, const char *xml) {
struct uml_driver *driver = conn->privateData; struct uml_driver *driver = conn->privateData;
@ -1892,7 +1897,7 @@ static virDriver umlDriver = {
umlListDefinedDomains, /* listDefinedDomains */ umlListDefinedDomains, /* listDefinedDomains */
umlNumDefinedDomains, /* numOfDefinedDomains */ umlNumDefinedDomains, /* numOfDefinedDomains */
umlDomainStart, /* domainCreate */ umlDomainStart, /* domainCreate */
NULL, /* domainCreateWithFlags */ umlDomainStartWithFlags, /* domainCreateWithFlags */
umlDomainDefine, /* domainDefineXML */ umlDomainDefine, /* domainDefineXML */
umlDomainUndefine, /* domainUndefine */ umlDomainUndefine, /* domainUndefine */
NULL, /* domainAttachDevice */ NULL, /* domainAttachDevice */

View File

@ -3143,7 +3143,7 @@ cleanup:
return ret; return ret;
} }
static int vboxDomainCreate(virDomainPtr dom) { static int vboxDomainCreateWithFlags(virDomainPtr dom, unsigned int flags) {
VBOX_OBJECT_CHECK(dom->conn, int, -1); VBOX_OBJECT_CHECK(dom->conn, int, -1);
IMachine **machines = NULL; IMachine **machines = NULL;
IProgress *progress = NULL; IProgress *progress = NULL;
@ -3155,6 +3155,8 @@ static int vboxDomainCreate(virDomainPtr dom) {
nsresult rc; nsresult rc;
int i = 0; int i = 0;
virCheckFlags(0, -1);
if (!dom->name) { if (!dom->name) {
vboxError(VIR_ERR_INTERNAL_ERROR, "%s", vboxError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Error while reading the domain name")); _("Error while reading the domain name"));
@ -3361,6 +3363,10 @@ cleanup:
return ret; return ret;
} }
static int vboxDomainCreate(virDomainPtr dom) {
return vboxDomainCreateWithFlags(dom, 0);
}
static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) { static virDomainPtr vboxDomainDefineXML(virConnectPtr conn, const char *xml) {
VBOX_OBJECT_CHECK(conn, virDomainPtr, NULL); VBOX_OBJECT_CHECK(conn, virDomainPtr, NULL);
IMachine *machine = NULL; IMachine *machine = NULL;
@ -8177,7 +8183,7 @@ virDriver NAME(Driver) = {
vboxListDefinedDomains, /* listDefinedDomains */ vboxListDefinedDomains, /* listDefinedDomains */
vboxNumOfDefinedDomains, /* numOfDefinedDomains */ vboxNumOfDefinedDomains, /* numOfDefinedDomains */
vboxDomainCreate, /* domainCreate */ vboxDomainCreate, /* domainCreate */
NULL, /* domainCreateWithFlags */ vboxDomainCreateWithFlags, /* domainCreateWithFlags */
vboxDomainDefineXML, /* domainDefineXML */ vboxDomainDefineXML, /* domainDefineXML */
vboxDomainUndefine, /* domainUndefine */ vboxDomainUndefine, /* domainUndefine */
vboxDomainAttachDevice, /* domainAttachDevice */ vboxDomainAttachDevice, /* domainAttachDevice */

View File

@ -1381,11 +1381,13 @@ xenUnifiedNumOfDefinedDomains (virConnectPtr conn)
} }
static int static int
xenUnifiedDomainCreate (virDomainPtr dom) xenUnifiedDomainCreateWithFlags (virDomainPtr dom, unsigned int flags)
{ {
GET_PRIVATE(dom->conn); GET_PRIVATE(dom->conn);
int i; int i;
virCheckFlags(0, -1);
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i) for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i)
if (priv->opened[i] && drivers[i]->domainCreate && if (priv->opened[i] && drivers[i]->domainCreate &&
drivers[i]->domainCreate (dom) == 0) drivers[i]->domainCreate (dom) == 0)
@ -1394,6 +1396,12 @@ xenUnifiedDomainCreate (virDomainPtr dom)
return -1; return -1;
} }
static int
xenUnifiedDomainCreate (virDomainPtr dom)
{
return xenUnifiedDomainCreateWithFlags(dom, 0);
}
static virDomainPtr static virDomainPtr
xenUnifiedDomainDefineXML (virConnectPtr conn, const char *xml) xenUnifiedDomainDefineXML (virConnectPtr conn, const char *xml)
{ {
@ -1941,7 +1949,7 @@ static virDriver xenUnifiedDriver = {
xenUnifiedListDefinedDomains, /* listDefinedDomains */ xenUnifiedListDefinedDomains, /* listDefinedDomains */
xenUnifiedNumOfDefinedDomains, /* numOfDefinedDomains */ xenUnifiedNumOfDefinedDomains, /* numOfDefinedDomains */
xenUnifiedDomainCreate, /* domainCreate */ xenUnifiedDomainCreate, /* domainCreate */
NULL, /* domainCreateWithFlags */ xenUnifiedDomainCreateWithFlags, /* domainCreateWithFlags */
xenUnifiedDomainDefineXML, /* domainDefineXML */ xenUnifiedDomainDefineXML, /* domainDefineXML */
xenUnifiedDomainUndefine, /* domainUndefine */ xenUnifiedDomainUndefine, /* domainUndefine */
xenUnifiedDomainAttachDevice, /* domainAttachDevice */ xenUnifiedDomainAttachDevice, /* domainAttachDevice */

View File

@ -1448,17 +1448,20 @@ xenapiNumOfDefinedDomains (virConnectPtr conn)
} }
/* /*
* xenapiDomainCreate * xenapiDomainCreateWithFlags
* *
* starts a VM * starts a VM
* Return 0 on success or -1 in case of error * Return 0 on success or -1 in case of error
*/ */
static int static int
xenapiDomainCreate (virDomainPtr dom) xenapiDomainCreateWithFlags (virDomainPtr dom, unsigned int flags)
{ {
xen_vm_set *vms; xen_vm_set *vms;
xen_vm vm; xen_vm vm;
xen_session *session = ((struct _xenapiPrivate *)(dom->conn->privateData))->session; xen_session *session = ((struct _xenapiPrivate *)(dom->conn->privateData))->session;
virCheckFlags(0, -1);
if (xen_vm_get_by_name_label(session, &vms, dom->name) && vms->size > 0) { if (xen_vm_get_by_name_label(session, &vms, dom->name) && vms->size > 0) {
if (vms->size != 1) { if (vms->size != 1) {
xenapiSessionErrorHandler(dom->conn, VIR_ERR_INTERNAL_ERROR, xenapiSessionErrorHandler(dom->conn, VIR_ERR_INTERNAL_ERROR,
@ -1481,6 +1484,18 @@ xenapiDomainCreate (virDomainPtr dom)
return 0; return 0;
} }
/*
* xenapiDomainCreate
*
* starts a VM
* Return 0 on success or -1 in case of error
*/
static int
xenapiDomainCreate (virDomainPtr dom)
{
return xenapiDomainCreateWithFlags(dom, 0);
}
/* /*
* xenapiDomainDefineXML * xenapiDomainDefineXML
* *
@ -1744,7 +1759,7 @@ static virDriver xenapiDriver = {
xenapiListDefinedDomains, /* listDefinedDomains */ xenapiListDefinedDomains, /* listDefinedDomains */
xenapiNumOfDefinedDomains, /* numOfDefinedDomains */ xenapiNumOfDefinedDomains, /* numOfDefinedDomains */
xenapiDomainCreate, /* domainCreate */ xenapiDomainCreate, /* domainCreate */
NULL, /* domainCreateWithFlags */ xenapiDomainCreateWithFlags, /* domainCreateWithFlags */
xenapiDomainDefineXML, /* domainDefineXML */ xenapiDomainDefineXML, /* domainDefineXML */
xenapiDomainUndefine, /* domainUndefine */ xenapiDomainUndefine, /* domainUndefine */
NULL, /* domainAttachDevice */ NULL, /* domainAttachDevice */