From 523c6908f8c21cede0121a8fdac9ad76c01d4d1c Mon Sep 17 00:00:00 2001 From: John Ferlan Date: Mon, 10 Nov 2014 12:23:46 -0500 Subject: [PATCH] storage: Introduce virStoragePoolSaveConfig https://bugzilla.redhat.com/show_bug.cgi?id=1160926 Introduce the ability to save a configuration of a persistent configuration that may be changed by storage pool backend activity, such as start or stop --- src/conf/storage_conf.c | 37 ++++++++++++++++++++++--------------- src/conf/storage_conf.h | 2 ++ src/libvirt_private.syms | 1 + 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index 52656e59f4..4126451c3b 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -1884,14 +1884,33 @@ virStoragePoolLoadAllConfigs(virStoragePoolObjListPtr pools, } int -virStoragePoolObjSaveDef(virStorageDriverStatePtr driver, - virStoragePoolObjPtr pool, +virStoragePoolSaveConfig(const char *configFile, virStoragePoolDefPtr def) { char uuidstr[VIR_UUID_STRING_BUFLEN]; char *xml; int ret = -1; + if (!(xml = virStoragePoolDefFormat(def))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("failed to generate XML")); + return -1; + } + + virUUIDFormat(def->uuid, uuidstr); + ret = virXMLSaveFile(configFile, + virXMLPickShellSafeComment(def->name, uuidstr), + "pool-edit", xml); + VIR_FREE(xml); + + return ret; +} + +int +virStoragePoolObjSaveDef(virStorageDriverStatePtr driver, + virStoragePoolObjPtr pool, + virStoragePoolDefPtr def) +{ if (!pool->configFile) { if (virFileMakePath(driver->configDir) < 0) { virReportSystemError(errno, @@ -1912,19 +1931,7 @@ virStoragePoolObjSaveDef(virStorageDriverStatePtr driver, } } - if (!(xml = virStoragePoolDefFormat(def))) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("failed to generate XML")); - return -1; - } - - virUUIDFormat(def->uuid, uuidstr); - ret = virXMLSaveFile(pool->configFile, - virXMLPickShellSafeComment(def->name, uuidstr), - "pool-edit", xml); - VIR_FREE(xml); - - return ret; + return virStoragePoolSaveConfig(pool->configFile, def); } int diff --git a/src/conf/storage_conf.h b/src/conf/storage_conf.h index a9b5bdb9b6..67145a00b6 100644 --- a/src/conf/storage_conf.h +++ b/src/conf/storage_conf.h @@ -360,6 +360,8 @@ virStoragePoolObjPtr virStoragePoolObjAssignDef(virStoragePoolObjListPtr pools, virStoragePoolDefPtr def); +int virStoragePoolSaveConfig(const char *configDir, + virStoragePoolDefPtr def); int virStoragePoolObjSaveDef(virStorageDriverStatePtr driver, virStoragePoolObjPtr pool, virStoragePoolDefPtr def); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index b8f35e87f7..0864618b06 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -753,6 +753,7 @@ virStoragePoolObjLock; virStoragePoolObjRemove; virStoragePoolObjSaveDef; virStoragePoolObjUnlock; +virStoragePoolSaveConfig; virStoragePoolSourceAdapterTypeFromString; virStoragePoolSourceAdapterTypeToString; virStoragePoolSourceClear;