From cd57b7c742a6b06d6064c00f99d4cbd55f06b5eb Mon Sep 17 00:00:00 2001 From: Joao Martins Date: Wed, 3 Feb 2016 21:40:36 +0000 Subject: [PATCH] conf: add caps to virDomainSaveConfig virDomainSaveConfig calls virDomainDefFormat which was setting the caps to NULL, thus keeping the old behaviour (i.e. not looking at netprefix). This patch adds the virCapsPtr to the function and allows the configuration to be saved and skipping interface names that were registered with virCapabilitiesSetNetPrefix(). Signed-off-by: Joao Martins --- src/bhyve/bhyve_driver.c | 2 +- src/conf/domain_conf.c | 5 +++-- src/conf/domain_conf.h | 1 + src/libxl/libxl_driver.c | 15 +++++++------ src/lxc/lxc_driver.c | 20 +++++++++-------- src/qemu/qemu_blockjob.c | 1 + src/qemu/qemu_driver.c | 47 ++++++++++++++++++++++----------------- src/qemu/qemu_migration.c | 3 ++- src/qemu/qemu_process.c | 5 +++-- src/uml/uml_driver.c | 2 +- 10 files changed, 57 insertions(+), 44 deletions(-) diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index c23c310e37..337a29ef49 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -551,7 +551,7 @@ bhyveDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flag def = NULL; vm->persistent = 1; - if (virDomainSaveConfig(BHYVE_CONFIG_DIR, + if (virDomainSaveConfig(BHYVE_CONFIG_DIR, caps, vm->newDef ? vm->newDef : vm->def) < 0) { virDomainObjListRemove(privconn->domains, vm); vm = NULL; diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index cc7af80276..035e5e12e3 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -22725,12 +22725,13 @@ virDomainSaveXML(const char *configDir, int virDomainSaveConfig(const char *configDir, + virCapsPtr caps, virDomainDefPtr def) { int ret = -1; char *xml; - if (!(xml = virDomainDefFormat(def, NULL, VIR_DOMAIN_DEF_FORMAT_SECURE))) + if (!(xml = virDomainDefFormat(def, caps, VIR_DOMAIN_DEF_FORMAT_SECURE))) goto cleanup; if (virDomainSaveXML(configDir, def, xml)) @@ -23914,7 +23915,7 @@ virDomainObjSetMetadata(virDomainObjPtr vm, uri) < 0) return -1; - if (virDomainSaveConfig(configDir, persistentDef) < 0) + if (virDomainSaveConfig(configDir, caps, persistentDef) < 0) return -1; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 0748c02ebd..8843cbda19 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2908,6 +2908,7 @@ int virDomainSaveXML(const char *configDir, const char *xml); int virDomainSaveConfig(const char *configDir, + virCapsPtr caps, virDomainDefPtr def); int virDomainSaveStatus(virDomainXMLOptionPtr xmlopt, const char *statusDir, diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index dfaf3a05d3..d2114ca04e 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -1511,7 +1511,7 @@ libxlDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, virDomainDefSetMemoryTotal(persistentDef, newmem); if (persistentDef->mem.cur_balloon > newmem) persistentDef->mem.cur_balloon = newmem; - ret = virDomainSaveConfig(cfg->configDir, persistentDef); + ret = virDomainSaveConfig(cfg->configDir, cfg->caps, persistentDef); goto endjob; } @@ -1543,7 +1543,7 @@ libxlDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, if (flags & VIR_DOMAIN_MEM_CONFIG) { sa_assert(persistentDef); persistentDef->mem.cur_balloon = newmem; - ret = virDomainSaveConfig(cfg->configDir, persistentDef); + ret = virDomainSaveConfig(cfg->configDir, cfg->caps, persistentDef); goto endjob; } } @@ -2237,7 +2237,7 @@ libxlDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, } } if (flags & VIR_DOMAIN_VCPU_CONFIG) { - if (virDomainSaveConfig(cfg->configDir, def) < 0) { + if (virDomainSaveConfig(cfg->configDir, cfg->caps, def) < 0) { VIR_WARN("Unable to save configuration of vm %s after changing vcpus", vm->def->name); } @@ -2394,7 +2394,7 @@ libxlDomainPinVcpuFlags(virDomainPtr dom, unsigned int vcpu, if (flags & VIR_DOMAIN_AFFECT_LIVE) { ret = virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm); } else if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - ret = virDomainSaveConfig(cfg->configDir, targetDef); + ret = virDomainSaveConfig(cfg->configDir, cfg->caps, targetDef); } endjob: @@ -2805,6 +2805,7 @@ libxlDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flag vm->persistent = 1; if (virDomainSaveConfig(cfg->configDir, + cfg->caps, vm->newDef ? vm->newDef : vm->def) < 0) { virDomainObjListRemove(driver->domains, vm); vm = NULL; @@ -3749,7 +3750,7 @@ libxlDomainAttachDeviceFlags(virDomainPtr dom, const char *xml, /* Finally, if no error until here, we can save config. */ if (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG) { - ret = virDomainSaveConfig(cfg->configDir, vmdef); + ret = virDomainSaveConfig(cfg->configDir, cfg->caps, vmdef); if (!ret) { virDomainObjAssignDef(vm, vmdef, false, NULL); vmdef = NULL; @@ -3857,7 +3858,7 @@ libxlDomainDetachDeviceFlags(virDomainPtr dom, const char *xml, /* Finally, if no error until here, we can save config. */ if (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG) { - ret = virDomainSaveConfig(cfg->configDir, vmdef); + ret = virDomainSaveConfig(cfg->configDir, cfg->caps, vmdef); if (!ret) { virDomainObjAssignDef(vm, vmdef, false, NULL); vmdef = NULL; @@ -3962,7 +3963,7 @@ libxlDomainUpdateDeviceFlags(virDomainPtr dom, const char *xml, /* Finally, if no error until here, we can save config. */ if (!ret && (flags & VIR_DOMAIN_DEVICE_MODIFY_CONFIG)) { - ret = virDomainSaveConfig(cfg->configDir, vmdef); + ret = virDomainSaveConfig(cfg->configDir, cfg->caps, vmdef); if (!ret) { virDomainObjAssignDef(vm, vmdef, false, NULL); vmdef = NULL; diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index 7be92c75a4..58c9bb463b 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -488,7 +488,7 @@ lxcDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags) def = NULL; vm->persistent = 1; - if (virDomainSaveConfig(cfg->configDir, + if (virDomainSaveConfig(cfg->configDir, driver->caps, vm->newDef ? vm->newDef : vm->def) < 0) { virDomainObjListRemove(driver->domains, vm); vm = NULL; @@ -737,7 +737,8 @@ static int lxcDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, virDomainDefSetMemoryTotal(persistentDef, newmem); if (persistentDef->mem.cur_balloon > newmem) persistentDef->mem.cur_balloon = newmem; - if (virDomainSaveConfig(cfg->configDir, persistentDef) < 0) + if (virDomainSaveConfig(cfg->configDir, driver->caps, + persistentDef) < 0) goto cleanup; } } else { @@ -770,7 +771,8 @@ static int lxcDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, if (flags & VIR_DOMAIN_AFFECT_CONFIG) { persistentDef->mem.cur_balloon = newmem; - if (virDomainSaveConfig(cfg->configDir, persistentDef) < 0) + if (virDomainSaveConfig(cfg->configDir, driver->caps, + persistentDef) < 0) goto cleanup; } } @@ -915,7 +917,7 @@ lxcDomainSetMemoryParameters(virDomainPtr dom, #undef LXC_SET_MEM_PARAMETER if (flags & VIR_DOMAIN_AFFECT_CONFIG && - virDomainSaveConfig(cfg->configDir, vmdef) < 0) + virDomainSaveConfig(cfg->configDir, driver->caps, vmdef) < 0) goto cleanup; ret = 0; @@ -2025,7 +2027,7 @@ lxcDomainSetSchedulerParametersFlags(virDomainPtr dom, if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - rc = virDomainSaveConfig(cfg->configDir, vmdef); + rc = virDomainSaveConfig(cfg->configDir, driver->caps, vmdef); if (rc < 0) goto cleanup; @@ -2727,7 +2729,7 @@ lxcDomainSetBlkioParameters(virDomainPtr dom, } } - if (virDomainSaveConfig(cfg->configDir, persistentDef) < 0) + if (virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef) < 0) ret = -1; } @@ -5081,7 +5083,7 @@ static int lxcDomainAttachDeviceFlags(virDomainPtr dom, /* Finally, if no error until here, we can save config. */ if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - ret = virDomainSaveConfig(cfg->configDir, vmdef); + ret = virDomainSaveConfig(cfg->configDir, driver->caps, vmdef); if (!ret) { virDomainObjAssignDef(vm, vmdef, false, NULL); vmdef = NULL; @@ -5203,7 +5205,7 @@ static int lxcDomainUpdateDeviceFlags(virDomainPtr dom, /* Finally, if no error until here, we can save config. */ if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - ret = virDomainSaveConfig(cfg->configDir, vmdef); + ret = virDomainSaveConfig(cfg->configDir, driver->caps, vmdef); if (!ret) { virDomainObjAssignDef(vm, vmdef, false, NULL); vmdef = NULL; @@ -5323,7 +5325,7 @@ static int lxcDomainDetachDeviceFlags(virDomainPtr dom, /* Finally, if no error until here, we can save config. */ if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - ret = virDomainSaveConfig(cfg->configDir, vmdef); + ret = virDomainSaveConfig(cfg->configDir, driver->caps, vmdef); if (!ret) { virDomainObjAssignDef(vm, vmdef, false, NULL); vmdef = NULL; diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 1d5b7cee06..f14e70bf67 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -189,6 +189,7 @@ qemuBlockJobEventProcess(virQEMUDriverPtr driver, VIR_WARN("Unable to save status on vm %s after block job", vm->def->name); if (persistDisk && virDomainSaveConfig(cfg->configDir, + driver->caps, vm->newDef) < 0) VIR_WARN("Unable to update persistent definition on vm %s " "after block job", vm->def->name); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 51b9aad00d..d62383175c 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -2432,7 +2432,8 @@ static int qemuDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, if (persistentDef->mem.cur_balloon > newmem) persistentDef->mem.cur_balloon = newmem; - ret = virDomainSaveConfig(cfg->configDir, persistentDef); + ret = virDomainSaveConfig(cfg->configDir, driver->caps, + persistentDef); goto endjob; } @@ -2471,7 +2472,8 @@ static int qemuDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, if (persistentDef) { persistentDef->mem.cur_balloon = newmem; - ret = virDomainSaveConfig(cfg->configDir, persistentDef); + ret = virDomainSaveConfig(cfg->configDir, driver->caps, + persistentDef); goto endjob; } } @@ -2560,7 +2562,7 @@ static int qemuDomainSetMemoryStatsPeriod(virDomainPtr dom, int period, goto endjob; } persistentDef->memballoon->period = period; - ret = virDomainSaveConfig(cfg->configDir, persistentDef); + ret = virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef); goto endjob; } @@ -5103,7 +5105,8 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus, goto endjob; } - if (virDomainSaveConfig(cfg->configDir, persistentDef) < 0) + if (virDomainSaveConfig(cfg->configDir, driver->caps, + persistentDef) < 0) goto endjob; } @@ -5293,7 +5296,7 @@ qemuDomainPinVcpuFlags(virDomainPtr dom, goto endjob; } - ret = virDomainSaveConfig(cfg->configDir, persistentDef); + ret = virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef); goto endjob; } @@ -5497,7 +5500,7 @@ qemuDomainPinEmulator(virDomainPtr dom, if (!(persistentDef->cputune.emulatorpin = virBitmapNewCopy(pcpumap))) goto endjob; - ret = virDomainSaveConfig(cfg->configDir, persistentDef); + ret = virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef); goto endjob; } @@ -5997,7 +6000,7 @@ qemuDomainPinIOThread(virDomainPtr dom, iothrid->cpumask = cpumask; iothrid->autofill = false; - ret = virDomainSaveConfig(cfg->configDir, persistentDef); + ret = virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef); goto endjob; } @@ -6300,7 +6303,8 @@ qemuDomainChgIOThread(virQEMUDriverPtr driver, persistentDef->iothreads--; } - if (virDomainSaveConfig(cfg->configDir, persistentDef) < 0) + if (virDomainSaveConfig(cfg->configDir, driver->caps, + persistentDef) < 0) goto endjob; } @@ -7624,7 +7628,7 @@ static virDomainPtr qemuDomainDefineXMLFlags(virConnectPtr conn, const char *xml } vm->persistent = 1; - if (virDomainSaveConfig(cfg->configDir, + if (virDomainSaveConfig(cfg->configDir, driver->caps, vm->newDef ? vm->newDef : vm->def) < 0) { if (oldDef) { /* There is backup so this VM was defined before. @@ -8614,7 +8618,7 @@ static int qemuDomainAttachDeviceFlags(virDomainPtr dom, const char *xml, /* Finally, if no error until here, we can save config. */ if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - ret = virDomainSaveConfig(cfg->configDir, vmdef); + ret = virDomainSaveConfig(cfg->configDir, driver->caps, vmdef); if (!ret) { virDomainObjAssignDef(vm, vmdef, false, NULL); vmdef = NULL; @@ -8740,7 +8744,7 @@ static int qemuDomainUpdateDeviceFlags(virDomainPtr dom, /* Finally, if no error until here, we can save config. */ if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - ret = virDomainSaveConfig(cfg->configDir, vmdef); + ret = virDomainSaveConfig(cfg->configDir, driver->caps, vmdef); if (!ret) { virDomainObjAssignDef(vm, vmdef, false, NULL); vmdef = NULL; @@ -8860,7 +8864,7 @@ static int qemuDomainDetachDeviceFlags(virDomainPtr dom, const char *xml, /* Finally, if no error until here, we can save config. */ if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - ret = virDomainSaveConfig(cfg->configDir, vmdef); + ret = virDomainSaveConfig(cfg->configDir, driver->caps, vmdef); if (!ret) { virDomainObjAssignDef(vm, vmdef, false, NULL); vmdef = NULL; @@ -9418,7 +9422,7 @@ qemuDomainSetBlkioParameters(virDomainPtr dom, } } - if (virDomainSaveConfig(cfg->configDir, persistentDef) < 0) + if (virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef) < 0) ret = -1; } @@ -9975,7 +9979,7 @@ qemuDomainSetMemoryParameters(virDomainPtr dom, goto endjob; if (flags & VIR_DOMAIN_AFFECT_CONFIG && - virDomainSaveConfig(cfg->configDir, persistentDef) < 0) + virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef) < 0) goto endjob; ret = 0; @@ -10251,7 +10255,7 @@ qemuDomainSetNumaParameters(virDomainPtr dom, -1, mode, nodeset) < 0) goto endjob; - if (virDomainSaveConfig(cfg->configDir, persistentDef) < 0) + if (virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef) < 0) goto endjob; } @@ -10613,7 +10617,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom, } if (flags & VIR_DOMAIN_AFFECT_CONFIG) { - rc = virDomainSaveConfig(cfg->configDir, vmdef); + rc = virDomainSaveConfig(cfg->configDir, driver->caps, vmdef); if (rc < 0) goto endjob; @@ -11410,7 +11414,7 @@ qemuDomainSetInterfaceParameters(virDomainPtr dom, } } - if (virDomainSaveConfig(cfg->configDir, persistentDef) < 0) + if (virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef) < 0) goto endjob; } @@ -13738,7 +13742,7 @@ qemuDomainSnapshotCreateInactiveExternal(virQEMUDriverPtr driver, } defdisk->src->format = snapdisk->src->format; - if (virDomainSaveConfig(cfg->configDir, vm->def) < 0) + if (virDomainSaveConfig(cfg->configDir, driver->caps, vm->def) < 0) goto cleanup; } } @@ -14518,7 +14522,8 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver, if (ret == 0 || !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_TRANSACTION)) { if (virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm) < 0 || - (persist && virDomainSaveConfig(cfg->configDir, vm->newDef) < 0)) + (persist && virDomainSaveConfig(cfg->configDir, driver->caps, + vm->newDef) < 0)) ret = -1; } virObjectUnref(cfg); @@ -17811,7 +17816,7 @@ qemuDomainSetBlockIoTune(virDomainPtr dom, info.write_iops_sec = oldinfo->write_iops_sec; } conf_disk->blkdeviotune = info; - ret = virDomainSaveConfig(cfg->configDir, persistentDef); + ret = virDomainSaveConfig(cfg->configDir, driver->caps, persistentDef); if (ret < 0) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("Write to config file failed")); @@ -20035,7 +20040,7 @@ qemuDomainRenameCallback(virDomainObjPtr vm, vm->def->name = new_dom_name; new_dom_name = NULL; - if (virDomainSaveConfig(cfg->configDir, vm->def) < 0) + if (virDomainSaveConfig(cfg->configDir, driver->caps, vm->def) < 0) goto rollback; if (virFileExists(old_dom_cfg_file) && diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 51e7125280..2f5b368a24 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -5747,7 +5747,8 @@ qemuMigrationPersist(virQEMUDriverPtr driver, if (!(vmdef = virDomainObjGetPersistentDef(caps, driver->xmlopt, vm))) goto error; - if (virDomainSaveConfig(cfg->configDir, vmdef) < 0 && !ignoreSaveError) + if (virDomainSaveConfig(cfg->configDir, driver->caps, vmdef) < 0 && + !ignoreSaveError) goto error; event = virDomainEventLifecycleNewFromObj(vm, diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 7b09ba7389..58f8f4f7dd 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -3924,6 +3924,7 @@ qemuProcessVerifyGuestCPU(virQEMUDriverPtr driver, static int qemuPrepareNVRAM(virQEMUDriverConfigPtr cfg, + virCapsPtr caps, virDomainObjPtr vm, bool migrated) { @@ -3963,7 +3964,7 @@ qemuPrepareNVRAM(virQEMUDriverConfigPtr cfg, generated = true; if (vm->persistent && - virDomainSaveConfig(cfg->configDir, vm->def) < 0) + virDomainSaveConfig(cfg->configDir, caps, vm->def) < 0) goto cleanup; } @@ -4437,7 +4438,7 @@ qemuProcessInit(virQEMUDriverPtr driver, * Fill them in prior to setting the domain def as transient. */ VIR_DEBUG("Generating paths"); - if (qemuPrepareNVRAM(cfg, vm, migration) < 0) + if (qemuPrepareNVRAM(cfg, caps, vm, migration) < 0) goto stop; /* Do this upfront, so any part of the startup process can add diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c index 4469426a36..3cfa36f558 100644 --- a/src/uml/uml_driver.c +++ b/src/uml/uml_driver.c @@ -2103,7 +2103,7 @@ umlDomainDefineXMLFlags(virConnectPtr conn, const char *xml, unsigned int flags) def = NULL; vm->persistent = 1; - if (virDomainSaveConfig(driver->configDir, + if (virDomainSaveConfig(driver->configDir, driver->caps, vm->newDef ? vm->newDef : vm->def) < 0) { virDomainObjListRemove(driver->domains, vm);