This patch adds an optional attribute note="" to the <description> element in the domain XML. This attribute can hold a short note defined by the user to ease the identification of domains. The note is limited to 40 characters. *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 | 7 +++++-- docs/schemas/domaincommon.rng | 14 +++++++++++++- src/conf/domain_conf.c | 27 +++++++++++++++++++++++++-- src/conf/domain_conf.h | 1 + 4 files changed, 44 insertions(+), 5 deletions(-) diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 4b31e2a..0315734 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -32,7 +32,8 @@ <domain type='xen' id='3'> <name>fv0</name> <uuid>4dea22b31d52d8f32516782e98ab3fa0</uuid> - <description>Some human readable description</description> + <description note='Some short description'> + Some human readable (optional) long description</description> ...</pre> <dl> @@ -58,7 +59,9 @@ <dd>The content of the <code>description</code> element provides a human readable description of the virtual machine. This data is not used by libvirt in any way, it can contain any information the user - wants. <span class="since">Since 0.7.2</span></dd> + wants. <span class="since">Since 0.7.2</span> The optional attribute + <code>note</code> provides space for a shorter description. + <span class="since">Since 0.9.10</span></dd> </dl> <h3><a name="elementsOS">Operating system booting</a></h3> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index fdcbc28..0cf5caf 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -10,7 +10,19 @@ --> <define name="description"> <element name="description"> - <text/> + <optional> + <attribute name="note"> + <data type="string"/> + </attribute> + </optional> + <choice> + <group> + <text/> + </group> + <group> + <empty/> + </group> + </choice> </element> </define> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d474551..d1e0ab2 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1472,6 +1472,7 @@ void virDomainDefFree(virDomainDefPtr def) VIR_FREE(def->cpumask); VIR_FREE(def->emulator); VIR_FREE(def->description); + VIR_FREE(def->note); virBlkioDeviceWeightArrayClear(def->blkio.devices, def->blkio.ndevices); @@ -7103,6 +7104,22 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps, VIR_FREE(tmp); } + /* Extract short description of domain (note) */ + def->note = virXPathString("string(./description[1]/@note)", ctxt); + if (def->note) { + if (strchr(def->note, '\n')) { + virDomainReportError(VIR_ERR_XML_ERROR, + "%s", _("Note attribute can't contain newlines")); + goto error; + } + + if (strlen(def->note) > 40) { + virDomainReportError(VIR_ERR_XML_ERROR, + "%s", _("Note too long")); + goto error; + } + } + /* Extract documentation if present */ def->description = virXPathString("string(./description[1])", ctxt); @@ -11422,8 +11439,14 @@ virDomainDefFormatInternal(virDomainDefPtr def, virUUIDFormat(uuid, uuidstr); virBufferAsprintf(buf, " <uuid>%s</uuid>\n", uuidstr); - virBufferEscapeString(buf, " <description>%s</description>\n", - def->description); + if (def->note || def->description) { + virBufferAddLit(buf, " <description"); + virBufferEscapeString(buf, " note='%s'", def->note); + if (def->description) + virBufferEscapeString(buf, ">%s</description>\n", def->description); + else + virBufferAddLit(buf, "/>\n"); + } virBufferAsprintf(buf, " <memory>%lu</memory>\n", def->mem.max_balloon); virBufferAsprintf(buf, " <currentMemory>%lu</currentMemory>\n", diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index bac5a87..208a011 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1409,6 +1409,7 @@ struct _virDomainDef { int id; unsigned char uuid[VIR_UUID_BUFLEN]; char *name; + char *note; char *description; struct { -- 1.7.3.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list