[libvirt] [PATCH v3] Add warning message to XML definition files stored on disk

Michal Privoznik mprivozn at redhat.com
Fri May 6 14:13:17 UTC 2011


Users often edit XML file stored in configuration directory
thinking of modifying a domain/network/pool/etc. Thus it is wise
to let them know they are using the wrong way and give them hint.
---
diff to v2:
 - remove redundant flag VIR_XML_EMIT_WARNING
 - remove enum, pass const string instead
 - don't translate warning message

diff to v1:
 - instead of pointing users to web, write down the actual virsh command
 - write to passed FD instead of buffer

 src/conf/domain_conf.c   |    2 ++
 src/conf/network_conf.c  |    2 ++
 src/conf/nwfilter_conf.c |    4 ++++
 src/conf/storage_conf.c  |    2 ++
 src/libvirt_private.syms |    1 +
 src/util/util.c          |   37 +++++++++++++++++++++++++++++++++++++
 src/util/util.h          |    4 ++++
 7 files changed, 52 insertions(+), 0 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index eae178b..e98af0f 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -8561,6 +8561,8 @@ int virDomainSaveXML(const char *configDir,
         goto cleanup;
     }
 
+    virEmitXMLWarning(fd, def->name, "edit");
+
     towrite = strlen(xml);
     if (safewrite(fd, xml, towrite) < 0) {
         virReportSystemError(errno,
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 08f7b77..4eb46fa 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -925,6 +925,8 @@ int virNetworkSaveXML(const char *configDir,
         goto cleanup;
     }
 
+    virEmitXMLWarning(fd, def->name, "net-edit");
+
     towrite = strlen(xml);
     if (safewrite(fd, xml, towrite) < 0) {
         virReportSystemError(errno,
diff --git a/src/conf/nwfilter_conf.c b/src/conf/nwfilter_conf.c
index 5ba2972..eb75bad 100644
--- a/src/conf/nwfilter_conf.c
+++ b/src/conf/nwfilter_conf.c
@@ -2249,6 +2249,8 @@ int virNWFilterSaveXML(const char *configDir,
         goto cleanup;
     }
 
+    virEmitXMLWarning(fd, def->name, "nwfilter-edit");
+
     towrite = strlen(xml);
     if (safewrite(fd, xml, towrite) < 0) {
         virReportSystemError(errno,
@@ -2645,6 +2647,8 @@ virNWFilterObjSaveDef(virNWFilterDriverStatePtr driver,
         goto cleanup;
     }
 
+    virEmitXMLWarning(fd, def->name, "nwfilter-edit");
+
     towrite = strlen(xml);
     if (safewrite(fd, xml, towrite) != towrite) {
         virReportSystemError(errno,
diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index aeb1596..9be4cae 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -1551,6 +1551,8 @@ virStoragePoolObjSaveDef(virStorageDriverStatePtr driver,
         goto cleanup;
     }
 
+    virEmitXMLWarning(fd, def->name, "pool-edit");
+
     towrite = strlen(xml);
     if (safewrite(fd, xml, towrite) != towrite) {
         virReportSystemError(errno,
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index ea4bf74..e2e706d 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -901,6 +901,7 @@ virArgvToString;
 virAsprintf;
 virBuildPathInternal;
 virDirCreate;
+virEmitXMLWarning;
 virEnumFromString;
 virEnumToString;
 virEventAddHandle;
diff --git a/src/util/util.c b/src/util/util.c
index 9041ab6..3b151f4 100644
--- a/src/util/util.c
+++ b/src/util/util.c
@@ -3207,3 +3207,40 @@ bool virIsDevMapperDevice(const char *devname ATTRIBUTE_UNUSED)
     return false;
 }
 #endif
+
+int virEmitXMLWarning(int fd,
+                      const char *name,
+                      const char *cmd) {
+    size_t len;
+    const char *prologue = "<!--\n\
+WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE \n\
+OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:\n\
+virsh ";
+    const char *epilogue = "\n\
+or other application using the libvirt API.\n\
+-->\n\n";
+
+    if (fd < 0 || !name || !cmd)
+        return -1;
+
+    len = strlen(prologue);
+    if (safewrite(fd, prologue, len) != len)
+        return -1;
+
+    len = strlen(cmd);
+    if (safewrite(fd, cmd, len) != len)
+        return -1;
+
+    if (safewrite(fd, " ", 1) != 1)
+        return -1;
+
+    len = strlen(name);
+    if (safewrite(fd, name, len) != len)
+        return -1;
+
+    len = strlen(epilogue);
+    if (safewrite(fd, epilogue, len) != len)
+        return -1;
+
+    return 0;
+}
diff --git a/src/util/util.h b/src/util/util.h
index d320c40..9d8df06 100644
--- a/src/util/util.h
+++ b/src/util/util.h
@@ -299,4 +299,8 @@ int virBuildPathInternal(char **path, ...) ATTRIBUTE_SENTINEL;
 char *virTimestamp(void);
 
 bool virIsDevMapperDevice(const char *devname) ATTRIBUTE_NONNULL(1);
+
+int virEmitXMLWarning(int fd,
+                      const char *name,
+                      const char *cmd) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
 #endif /* __VIR_UTIL_H__ */
-- 
1.7.4.4




More information about the libvir-list mailing list