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

Eric Blake eblake at redhat.com
Thu May 5 20:08:25 UTC 2011


On 05/05/2011 05:25 AM, Michal Privoznik wrote:
> 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 v1:
>  - instead of pointing users to web, write down the actual virsh command
>  - write to passed FD instead of buffer

My apologies for not noticing sooner, but...

>  int virDomainSaveXML(const char *configDir,
>                       virDomainDefPtr def,
> -                     const char *xml)
> +                     const char *xml,
> +                     unsigned int flags)
>  {
>      char *configFile = NULL;
>      int fd = -1, ret = -1;
> @@ -8510,6 +8511,9 @@ int virDomainSaveXML(const char *configDir,
>          goto cleanup;
>      }
>  
> +    if (flags & VIR_XML_EMIT_WARNING)
> +        virEmitXMLWarning(fd, def->name, VIR_XML_EDIT_COMMAND_DOMAIN);

Every last caller to this function is now passing the same flag, so the
flags argument is redundant.  I thought we might have a difference where
sometimes we need it and sometimes we don't, but I don't see any cases
where we don't.  I'd prefer a v3 that touches fewer lines of code by not
adding the extra flags argument, but just unconditionally calling
virEmitXMLWarning here...

> +++ b/src/util/util.c
> @@ -3207,3 +3207,53 @@ bool virIsDevMapperDevice(const char *devname ATTRIBUTE_UNUSED)
>      return false;
>  }
>  #endif
> +
> +VIR_ENUM_IMPL(virXMLEditCommand, VIR_XML_EDIT_COMMAND_LAST,
> +              "",

Why do we need the "" entry?

> +              "edit",
> +              "net-edit",
> +              "nwfilter-edit",
> +              "pool-edit")
> +
> +int virEmitXMLWarning(int fd,
> +                      const char *name,
> +                      unsigned int cmd) {
> +    size_t len;
> +    const char *cmd_str = virXMLEditCommandTypeToString(cmd);
> +    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 ");

Do we really want these strings translated, or are they okay always
being in English?  The rest of the xml file is locale independent, and
I'm worried that if we put in a translated message, that a translator
might not form a well-formed xml comment in their translation, which
breaks things.  Furthermore, this is in a root-accessible file, much
like libvirtd.conf or qemu.conf, where we aren't translating any
comments in those files.

> +++ b/src/util/util.h
> @@ -299,4 +299,24 @@ int virBuildPathInternal(char **path, ...) ATTRIBUTE_SENTINEL;
>  char *virTimestamp(void);
>  
>  bool virIsDevMapperDevice(const char *devname) ATTRIBUTE_NONNULL(1);
> +
> +enum {
> +    VIR_XML_EMIT_WARNING = (1 << 0),
> +};

Since there was no one in your patch that passed 0, we don't need this flag.

> +
> +enum virXMLEditCommand {
> +    VIR_XML_EDIT_COMMAND_UNKNOWN = 0,

Since this command is completely internal, we should never be passing it
a bad command, and can start directly with domain.  But do we even need
an enum, or can we just pass a const char * and save ourselves the
effort of a lookup in the first place?

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20110505/5c272dcb/attachment-0001.sig>


More information about the libvir-list mailing list