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

Dave Allan dallan at redhat.com
Thu Apr 28 18:08:53 UTC 2011


On Thu, Apr 28, 2011 at 01:42:37PM -0400, Laine Stump wrote:
> On 04/28/2011 12:34 PM, Michal Privoznik wrote:
> >Users often edit XML domain 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.
> >---
> >  src/conf/domain_conf.c   |    2 ++
> >  src/conf/network_conf.c  |    1 +
> >  src/conf/nwfilter_conf.c |    3 +++
> >  src/conf/storage_conf.c  |    2 ++
> >  src/libvirt_private.syms |    1 +
> >  src/util/util.c          |   22 ++++++++++++++++++++++
> >  src/util/util.h          |    2 ++
> >  7 files changed, 33 insertions(+), 0 deletions(-)
> >
> >diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> >index 2a681d9..4cd1228 100644
> >--- a/src/conf/domain_conf.c
> >+++ b/src/conf/domain_conf.c
> >@@ -8543,6 +8543,7 @@ int virDomainSaveConfig(const char *configDir,
> >                                     VIR_DOMAIN_XML_WRITE_FLAGS)))
> >          goto cleanup;
> >
> >+    virSavePrependWarning(&xml);
> >      if (virDomainSaveXML(configDir, def, xml))
> >          goto cleanup;
> >
> >@@ -8563,6 +8564,7 @@ int virDomainSaveStatus(virCapsPtr caps,
> >      if (!(xml = virDomainObjFormat(caps, obj, flags)))
> >          goto cleanup;
> >
> >+    virSavePrependWarning(&xml);
> >      if (virDomainSaveXML(statusDir, obj->def, xml))
> >          goto cleanup;
> >
> >diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
> >index 5738757..82f10e6 100644
> >--- a/src/conf/network_conf.c
> >+++ b/src/conf/network_conf.c
> >@@ -959,6 +959,7 @@ int virNetworkSaveConfig(const char *configDir,
> >      if (!(xml = virNetworkDefFormat(def)))
> >          goto cleanup;
> >
> >+    virSavePrependWarning(&xml);
> >      if (virNetworkSaveXML(configDir, def, xml))
> >          goto cleanup;
> >
> >diff --git a/src/conf/nwfilter_conf.c b/src/conf/nwfilter_conf.c
> >index 09dc32b..fcd0b24 100644
> >--- a/src/conf/nwfilter_conf.c
> >+++ b/src/conf/nwfilter_conf.c
> >@@ -2282,6 +2282,7 @@ int virNWFilterSaveConfig(const char *configDir,
> >      if (!(xml = virNWFilterDefFormat(def)))
> >          goto cleanup;
> >
> >+    virSavePrependWarning(&xml);
> >      if (virNWFilterSaveXML(configDir, def, xml))
> >          goto cleanup;
> >
> >@@ -2635,6 +2636,8 @@ virNWFilterObjSaveDef(virNWFilterDriverStatePtr driver,
> >          return -1;
> >      }
> >
> >+    virSavePrependWarning(&xml);
> >+
> >      if ((fd = open(nwfilter->configFile,
> >                     O_WRONLY | O_CREAT | O_TRUNC,
> >                     S_IRUSR | S_IWUSR ))<  0) {
> >diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
> >index 116898d..96aa567 100644
> >--- a/src/conf/storage_conf.c
> >+++ b/src/conf/storage_conf.c
> >@@ -1542,6 +1542,8 @@ virStoragePoolObjSaveDef(virStorageDriverStatePtr driver,
> >          return -1;
> >      }
> >
> >+    virSavePrependWarning(&xml);
> >+
> >      if ((fd = open(pool->configFile,
> >                     O_WRONLY | O_CREAT | O_TRUNC,
> >                     S_IRUSR | S_IWUSR ))<  0) {
> >diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
> >index 1b22be6..f2c005e 100644
> >--- a/src/libvirt_private.syms
> >+++ b/src/libvirt_private.syms
> >@@ -946,6 +946,7 @@ virRandom;
> >  virRandomInitialize;
> >  virRun;
> >  virRunWithHook;
> >+virSavePrependWarning;
> >  virSetBlocking;
> >  virSetCloseExec;
> >  virSetInherit;
> >diff --git a/src/util/util.c b/src/util/util.c
> >index 1bb0328..c6a4634 100644
> >--- a/src/util/util.c
> >+++ b/src/util/util.c
> >@@ -3204,3 +3204,25 @@ bool virIsDevMapperDevice(const char *devname ATTRIBUTE_UNUSED)
> >      return false;
> >  }
> >  #endif
> >+
> >+int virSavePrependWarning(char **xml) {
> >+    char *retPtr = NULL;
> >+    int ret;
> >+
> >+    ret = virAsprintf(&retPtr, "%s\n%s",
> >+                      _("<!--\n\
> >+WARNING: THIS IS AN AUTO-GENERATED FILE.  CHANGES TO IT ARE LIKELY TO BE\n\
> >+OVERWRITTEN AND LOST.  Changes to xml configurations should be made using virsh\n\
> >+edit or other application using the libvirt API.  See:\n\
> 
> either s/or other/or another/ or else s/application/applications/

I think it's ok as written, but another would also be correct.

> >+\n\
> >+http://wiki.libvirt.org/wiki/index.php?title=FAQ#Where_are_VM_config_files_stored.3F_How_do_I_edit_a_VM.27s_XML_config.3F\n\
> >+-->\n"),
> 
> Can this URL change if the wiki is edited? Do we maybe want to put
> this info in a less modifiable place? (Dunno, just asking.)

That's a good point.  If we're going to point people at a URL, it
should be a static page.  (My bad for suggesting that URL in the first
place.)

> >+                      *xml);
> >+
> >+    if (ret<  0)
> >+        return ret;
> >+
> >+    VIR_FREE(*xml);
> 
> I'm not really comfortable that it requires the caller to initialize
> to 0. But that may be just me - anyone else have an opinion?
> 
> >+    *xml = retPtr;
> >+    return ret;
> >+}
> >diff --git a/src/util/util.h b/src/util/util.h
> >index d320c40..a6a91de 100644
> >--- a/src/util/util.h
> >+++ b/src/util/util.h
> >@@ -299,4 +299,6 @@ int virBuildPathInternal(char **path, ...) ATTRIBUTE_SENTINEL;
> >  char *virTimestamp(void);
> >
> >  bool virIsDevMapperDevice(const char *devname) ATTRIBUTE_NONNULL(1);
> >+
> >+int virSavePrependWarning(char **xml);
> >  #endif /* __VIR_UTIL_H__ */
> 
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list



More information about the libvir-list mailing list