[libvirt] [PATCHv3 1/4] xml: Add element <title> to allow short description of domains

Daniel Veillard veillard at redhat.com
Thu Feb 2 13:01:50 UTC 2012


On Wed, Feb 01, 2012 at 02:03:49PM +0100, Peter Krempa wrote:
> This patch adds a new element <title> to the domain XML. This attribute
> can hold a short title defined by the user to ease the identification of
> domains. The title may not contain newlines and should be reasonably short.
> 
>  *docs/formatdomain.html.in
>  *docs/schemas/domaincommon.rng
>         - add schema grammar for the new element and documentation
>   *src/conf/domain_conf.c
>   *src/conf/domain_conf.h
>         - add field to hold the new attribute
>         - add code to parse and create XML with the new attribute
> ---
>  docs/formatdomain.html.in                          |    8 +++++-
>  docs/schemas/domaincommon.rng                      |   15 ++++++++++-
>  src/conf/domain_conf.c                             |   11 ++++++++
>  src/conf/domain_conf.h                             |    1 +
>  .../qemu-simple-description-title.xml              |   27 ++++++++++++++++++++
>  tests/qemuxml2argvdata/qemuxml2argv-minimal.xml    |    5 +++
>  6 files changed, 65 insertions(+), 2 deletions(-)
>  create mode 100644 tests/domainschemadata/qemu-simple-description-title.xml
> 
> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> index d58a5e1..99152b6 100644
> --- a/docs/formatdomain.html.in
> +++ b/docs/formatdomain.html.in
> @@ -32,6 +32,7 @@
>  <domain type='xen' id='3'>
>    <name>fv0</name>
>    <uuid>4dea22b31d52d8f32516782e98ab3fa0</uuid>
> +  <title>A short description - title - of the domain</title>
>    <description>Some human readable description</description>
>    <metadata>
>      <app1:foo xmlns:app1="http://app1.org/app1/">..</app1:foo>
> @@ -58,6 +59,11 @@
>          specification. <span class="since">Since 0.0.1, sysinfo
>          since 0.8.7</span></dd>
> 
> +      <dt><code>title</code></dt>
> +      <dd>The optional element <code>title</code> provides space for a
> +        short description of the domain. The title should not contain
> +        any newlines. <span class="since">Since 0.9.10</span>.</dd>
> +
>        <dt><code>description</code></dt>
>        <dd>The content of the <code>description</code> element provides a
>          human readable description of the virtual machine. This data is not
> @@ -72,7 +78,7 @@
>          (if the application needs structure, they should have
>          sub-elements to their namespace
>          element). <span class="since">Since 0.9.10</span></dd>
> -    </dl>
> +   </dl>
> 
>      <h3><a name="elementsOS">Operating system booting</a></h3>
> 
> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
> index 2423154..1576233 100644
> --- a/docs/schemas/domaincommon.rng
> +++ b/docs/schemas/domaincommon.rng
> @@ -6,7 +6,7 @@
>    <include href='networkcommon.rng'/>
> 
>    <!--
> -    description element, may be placed anywhere under the root
> +    description and title element, may be placed anywhere under the root
>      -->
>    <define name="description">
>      <element name="description">
> @@ -14,6 +14,16 @@
>      </element>
>    </define>
> 
> +  <define name="title">
> +    <element name="title">
> +      <data type="string">
> +        <!-- Use literal newline instead of \n for bug in libxml2 2.7.6 -->
> +        <param name="pattern">[^
> +]+</param>

  Hum, using [^&#xA;]+  should do the trick too I think, since rng is XML
it would be first interpreted by the parser and replaced by the
equivalent character i.e. \n.

> +      </data>
> +    </element>
> +  </define>
> +
>    <!--
>        We handle only document defining a domain
>      -->
> @@ -23,6 +33,9 @@
>        <ref name="ids"/>
>        <interleave>
>          <optional>
> +          <ref name="title"/>
> +        </optional>
> +        <optional>
>            <ref name="description"/>
>          </optional>
>          <optional>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 35cb7a4..072fcc7 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -1481,6 +1481,7 @@ void virDomainDefFree(virDomainDefPtr def)
>      VIR_FREE(def->cpumask);
>      VIR_FREE(def->emulator);
>      VIR_FREE(def->description);
> +    VIR_FREE(def->title);
> 
>      virBlkioDeviceWeightArrayClear(def->blkio.devices,
>                                     def->blkio.ndevices);
> @@ -7158,6 +7159,14 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
>          VIR_FREE(tmp);
>      }
> 
> +    /* Extract short description of domain (title) */
> +    def->title = virXPathString("string(./title[1])", ctxt);
> +    if (def->title && strchr(def->title, '\n')) {
> +        virDomainReportError(VIR_ERR_XML_ERROR, "%s",
> +                             _("Domain title can't contain newlines"));
> +        goto error;
> +    }
> +
>      /* Extract documentation if present */
>      def->description = virXPathString("string(./description[1])", ctxt);
> 
> @@ -11487,6 +11496,8 @@ virDomainDefFormatInternal(virDomainDefPtr def,
>      virUUIDFormat(uuid, uuidstr);
>      virBufferAsprintf(buf, "  <uuid>%s</uuid>\n", uuidstr);
> 
> +    virBufferEscapeString(buf, "  <title>%s</title>\n", def->title);
> +
>      virBufferEscapeString(buf, "  <description>%s</description>\n",
>                            def->description);
> 
> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index 503684f..acb936e 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -1425,6 +1425,7 @@ struct _virDomainDef {
>      int id;
>      unsigned char uuid[VIR_UUID_BUFLEN];
>      char *name;
> +    char *title;
>      char *description;
> 
>      struct {
> diff --git a/tests/domainschemadata/qemu-simple-description-title.xml b/tests/domainschemadata/qemu-simple-description-title.xml
> new file mode 100644
> index 0000000..a8a9cac
> --- /dev/null
> +++ b/tests/domainschemadata/qemu-simple-description-title.xml
> @@ -0,0 +1,27 @@
> +<domain type='qemu'>
> +  <name>qemu-demo</name>
> +  <uuid>603cc28c-9841-864e-0949-8cc7d3bae9f8</uuid>
> +  <memory>65536</memory>
> +  <currentMemory>65536</currentMemory>
> +  <title>A short description of this domain</title>
> +  <description>
> +      A longer explanation that this domain is a test domain
> +      for validating domain schemas.
> +  </description>
> +  <vcpu>1</vcpu>
> +  <os>
> +    <type arch='x86_64' machine='pc-0.14'>hvm</type>
> +  </os>
> +  <features>
> +    <acpi/>
> +    <apic/>
> +    <pae/>
> +  </features>
> +  <clock offset='utc'/>
> +  <on_poweroff>destroy</on_poweroff>
> +  <on_reboot>restart</on_reboot>
> +  <on_crash>restart</on_crash>
> +  <devices>
> +    <emulator>/usr/bin/qemu-kvm</emulator>
> +  </devices>
> +</domain>
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-minimal.xml b/tests/qemuxml2argvdata/qemuxml2argv-minimal.xml
> index 2f13d46..51eb59a 100644
> --- a/tests/qemuxml2argvdata/qemuxml2argv-minimal.xml
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-minimal.xml
> @@ -1,6 +1,11 @@
>  <domain type='qemu'>
>    <name>QEMUGuest1</name>
>    <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
> +  <title>A description of the test machine.</title>
> +  <description>
> +      A test of qemu's minimal configuration.
> +      This test also tests the description and title elements.
> +  </description>
>    <memory>219100</memory>
>    <currentMemory>219100</currentMemory>
>    <vcpu cpuset='1-4,8-20,525'>1</vcpu>

  ACK, fairly close to what I wrote too,

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list