From b79ba8382e2205c416d7c4836ac9ee08c72e2c56 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Wed, 1 Feb 2012 14:03:49 +0100 Subject: [PATCH] xml: Add element to allow short description of domains 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 +++++++++++++++++++ .../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 d58a5e15e2..99152b6377 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 2423154b98..1576233706 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> + </data> + </element> + </define> + <!-- We handle only document defining a domain --> @@ -22,6 +32,9 @@ <ref name="hvs"/> <ref name="ids"/> <interleave> + <optional> + <ref name="title"/> + </optional> <optional> <ref name="description"/> </optional> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 35cb7a454d..072fcc7619 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\n", def->title); + virBufferEscapeString(buf, " %s\n", def->description); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 503684f408..acb936e69c 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 0000000000..a8a9cac452 --- /dev/null +++ b/tests/domainschemadata/qemu-simple-description-title.xml @@ -0,0 +1,27 @@ + + qemu-demo + 603cc28c-9841-864e-0949-8cc7d3bae9f8 + 65536 + 65536 + A short description of this domain + + A longer explanation that this domain is a test domain + for validating domain schemas. + + 1 + + hvm + + + + + + + + destroy + restart + restart + + /usr/bin/qemu-kvm + + diff --git a/tests/qemuxml2argvdata/qemuxml2argv-minimal.xml b/tests/qemuxml2argvdata/qemuxml2argv-minimal.xml index 2f13d46a00..51eb59a5e6 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-minimal.xml +++ b/tests/qemuxml2argvdata/qemuxml2argv-minimal.xml @@ -1,6 +1,11 @@ QEMUGuest1 c7a5fdbd-edaf-9455-926a-d65c16db1809 + A description of the test machine. + + A test of qemu's minimal configuration. + This test also tests the description and title elements. + 219100 219100 1 -- GitLab