]> xenbits.xensource.com Git - libvirt.git/commitdiff
nwfilter: Save config to disk if we generated a UUID
authorCole Robinson <crobinso@redhat.com>
Sun, 24 Apr 2016 23:04:10 +0000 (19:04 -0400)
committerCole Robinson <crobinso@redhat.com>
Mon, 2 May 2016 14:06:04 +0000 (10:06 -0400)
libvirt-daemon-config-nwfilter will put a bunch of xml configs
into /etc/libvirt/nwfilter. These configs don't hardcode a UUID
and depends on libvirt to generate one. However the generated UUID
is never saved to disk, unless the user manually calls Define.

This makes daemon reload quite noisy with many errors like:

error : virNWFilterObjAssignDef:3101 : operation failed: filter 'allow-incoming-ipv4' already exists with uuid 50def3b5-48d6-46a3-b005-cc22df4e5c5c

Because a new UUID is generated every time the config is read from
disk, so libvirt constantly thinks it's finding a new nwfilter.

Detect if we generated a UUID when the config file is loaded; if so,
resave the new contents to disk to ensure the UUID is persisteny.

This is similar to what was done in commit a47ae7c0 with virtual
networks and generated MAC addresses

src/conf/nwfilter_conf.c
src/conf/nwfilter_conf.h

index 544a65078aa955de4a055f5ada21ea3edc669c56..3f90f65d1fbe4f45c119fa5f89817e77e457bc9c 100644 (file)
@@ -2658,6 +2658,7 @@ virNWFilterDefParseXML(xmlXPathContextPtr ctxt)
     }
 
     uuid = virXPathString("string(./uuid)", ctxt);
+    ret->uuid_specified = (uuid != NULL);
     if (uuid == NULL) {
         if (virUUIDGenerate(ret->uuid) < 0) {
             virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -3178,6 +3179,11 @@ virNWFilterLoadConfig(virNWFilterObjListPtr nwfilters,
         goto error;
     }
 
+    /* We generated a UUID, make it permanent by saving the config to disk */
+    if (!def->uuid_specified &&
+        virNWFilterSaveConfig(configDir, def) < 0)
+        goto error;
+
     if (!(nwfilter = virNWFilterObjAssignDef(nwfilters, def)))
         goto error;
 
index 823cfa430d00998dcbd3c001c65e2b1d74666fe7..ea3cd5cd74360982cd0225adf324f424f0112311 100644 (file)
@@ -536,6 +536,7 @@ typedef virNWFilterDef *virNWFilterDefPtr;
 struct _virNWFilterDef {
     char *name;
     unsigned char uuid[VIR_UUID_BUFLEN];
+    bool uuid_specified;
 
     char *chainsuffix;
     virNWFilterChainPriority chainPriority;