mirror of https://gitee.com/openkylin/libvirt.git
Add QEMU driver events for defined/undefined config files
This commit is contained in:
parent
d3d54d2fc9
commit
a5e72f9177
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
Mon Nov 17 16:45:00 GMT 2008 Daniel Berrange <berrange@redhat.com>
|
||||
|
||||
Generate domain events for QEMU driver config files
|
||||
* src/qemu_driver.c: Generate events when config is defined
|
||||
and undefined
|
||||
* src/domain_conf.c, src/domain_conf.h: Add a callback for
|
||||
notifications of each loaded config file
|
||||
* src/lxc_driver.c: Pass NULL for config file notification
|
||||
callback parameter
|
||||
|
||||
Mon Nov 17 16:42:00 GMT 2008 Daniel Berrange <berrange@redhat.com>
|
||||
|
||||
Include an event 'detail' field providing the cause of
|
||||
|
|
|
@ -3242,31 +3242,38 @@ virDomainObjPtr virDomainLoadConfig(virConnectPtr conn,
|
|||
virDomainObjListPtr doms,
|
||||
const char *configDir,
|
||||
const char *autostartDir,
|
||||
const char *name)
|
||||
const char *name,
|
||||
virDomainLoadConfigNotify notify,
|
||||
void *opaque)
|
||||
{
|
||||
char *configFile = NULL, *autostartLink = NULL;
|
||||
virDomainDefPtr def = NULL;
|
||||
virDomainObjPtr dom;
|
||||
int autostart;
|
||||
int newVM = 1;
|
||||
|
||||
if ((configFile = virDomainConfigFile(conn, configDir, name)) == NULL)
|
||||
goto error;
|
||||
if ((autostartLink = virDomainConfigFile(conn, autostartDir, name)) == NULL)
|
||||
goto error;
|
||||
|
||||
|
||||
if ((autostart = virFileLinkPointsTo(autostartLink, configFile)) < 0)
|
||||
goto error;
|
||||
|
||||
if (!(def = virDomainDefParseFile(conn, caps, configFile)))
|
||||
goto error;
|
||||
|
||||
if (virDomainFindByName(doms, def->name))
|
||||
newVM = 0;
|
||||
|
||||
if (!(dom = virDomainAssignDef(conn, doms, def)))
|
||||
goto error;
|
||||
|
||||
dom->state = VIR_DOMAIN_SHUTOFF;
|
||||
dom->autostart = autostart;
|
||||
|
||||
if (notify)
|
||||
(*notify)(dom, newVM, opaque);
|
||||
|
||||
return dom;
|
||||
|
||||
error:
|
||||
|
@ -3280,7 +3287,9 @@ int virDomainLoadAllConfigs(virConnectPtr conn,
|
|||
virCapsPtr caps,
|
||||
virDomainObjListPtr doms,
|
||||
const char *configDir,
|
||||
const char *autostartDir)
|
||||
const char *autostartDir,
|
||||
virDomainLoadConfigNotify notify,
|
||||
void *opaque)
|
||||
{
|
||||
DIR *dir;
|
||||
struct dirent *entry;
|
||||
|
@ -3310,7 +3319,9 @@ int virDomainLoadAllConfigs(virConnectPtr conn,
|
|||
doms,
|
||||
configDir,
|
||||
autostartDir,
|
||||
entry->d_name);
|
||||
entry->d_name,
|
||||
notify,
|
||||
opaque);
|
||||
if (dom)
|
||||
dom->persistent = 1;
|
||||
}
|
||||
|
|
|
@ -549,18 +549,26 @@ int virDomainSaveConfig(virConnectPtr conn,
|
|||
const char *configDir,
|
||||
virDomainDefPtr def);
|
||||
|
||||
typedef void (*virDomainLoadConfigNotify)(virDomainObjPtr dom,
|
||||
int newDomain,
|
||||
void *opaque);
|
||||
|
||||
virDomainObjPtr virDomainLoadConfig(virConnectPtr conn,
|
||||
virCapsPtr caps,
|
||||
virDomainObjListPtr doms,
|
||||
const char *configDir,
|
||||
const char *autostartDir,
|
||||
const char *name);
|
||||
const char *name,
|
||||
virDomainLoadConfigNotify notify,
|
||||
void *opaque);
|
||||
|
||||
int virDomainLoadAllConfigs(virConnectPtr conn,
|
||||
virCapsPtr caps,
|
||||
virDomainObjListPtr doms,
|
||||
const char *configDir,
|
||||
const char *autostartDir);
|
||||
const char *autostartDir,
|
||||
virDomainLoadConfigNotify notify,
|
||||
void *opaque);
|
||||
|
||||
int virDomainDeleteConfig(virConnectPtr conn,
|
||||
const char *configDir,
|
||||
|
|
|
@ -1015,7 +1015,8 @@ static int lxcStartup(void)
|
|||
lxc_driver->caps,
|
||||
&lxc_driver->domains,
|
||||
lxc_driver->configDir,
|
||||
lxc_driver->autostartDir) < 0) {
|
||||
lxc_driver->autostartDir,
|
||||
NULL, NULL) < 0) {
|
||||
lxcShutdown();
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -226,7 +226,8 @@ qemudStartup(void) {
|
|||
qemu_driver->caps,
|
||||
&qemu_driver->domains,
|
||||
qemu_driver->configDir,
|
||||
qemu_driver->autostartDir) < 0) {
|
||||
qemu_driver->autostartDir,
|
||||
NULL, NULL) < 0) {
|
||||
qemudShutdown();
|
||||
return -1;
|
||||
}
|
||||
|
@ -243,6 +244,16 @@ qemudStartup(void) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
static void qemudNotifyLoadDomain(virDomainObjPtr vm, int newVM, void *opaque)
|
||||
{
|
||||
struct qemud_driver *driver = opaque;
|
||||
|
||||
if (newVM)
|
||||
qemudDomainEventDispatch(driver, vm,
|
||||
VIR_DOMAIN_EVENT_DEFINED,
|
||||
VIR_DOMAIN_EVENT_DEFINED_ADDED);
|
||||
}
|
||||
|
||||
/**
|
||||
* qemudReload:
|
||||
*
|
||||
|
@ -258,7 +269,8 @@ qemudReload(void) {
|
|||
qemu_driver->caps,
|
||||
&qemu_driver->domains,
|
||||
qemu_driver->configDir,
|
||||
qemu_driver->autostartDir);
|
||||
qemu_driver->autostartDir,
|
||||
qemudNotifyLoadDomain, qemu_driver);
|
||||
|
||||
qemudAutostartConfigs(qemu_driver);
|
||||
|
||||
|
@ -2365,10 +2377,15 @@ static virDomainPtr qemudDomainDefine(virConnectPtr conn, const char *xml) {
|
|||
virDomainDefPtr def;
|
||||
virDomainObjPtr vm;
|
||||
virDomainPtr dom;
|
||||
int newVM = 1;
|
||||
|
||||
if (!(def = virDomainDefParseString(conn, driver->caps, xml)))
|
||||
return NULL;
|
||||
|
||||
vm = virDomainFindByName(&driver->domains, def->name);
|
||||
if (vm)
|
||||
newVM = 0;
|
||||
|
||||
if (!(vm = virDomainAssignDef(conn,
|
||||
&driver->domains,
|
||||
def))) {
|
||||
|
@ -2385,6 +2402,12 @@ static virDomainPtr qemudDomainDefine(virConnectPtr conn, const char *xml) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
qemudDomainEventDispatch(driver, vm,
|
||||
VIR_DOMAIN_EVENT_DEFINED,
|
||||
newVM ?
|
||||
VIR_DOMAIN_EVENT_DEFINED_ADDED :
|
||||
VIR_DOMAIN_EVENT_DEFINED_UPDATED);
|
||||
|
||||
dom = virGetDomain(conn, vm->def->name, vm->def->uuid);
|
||||
if (dom) dom->id = vm->def->id;
|
||||
return dom;
|
||||
|
@ -2415,6 +2438,10 @@ static int qemudDomainUndefine(virDomainPtr dom) {
|
|||
if (virDomainDeleteConfig(dom->conn, driver->configDir, driver->autostartDir, vm) < 0)
|
||||
return -1;
|
||||
|
||||
qemudDomainEventDispatch(driver, vm,
|
||||
VIR_DOMAIN_EVENT_UNDEFINED,
|
||||
VIR_DOMAIN_EVENT_UNDEFINED_REMOVED);
|
||||
|
||||
virDomainRemoveInactive(&driver->domains,
|
||||
vm);
|
||||
|
||||
|
|
Loading…
Reference in New Issue