mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 17:34:18 +03:00
conf: set up for per-grammar overrides in schemas
This patch is my first experience playing with nested grammars, as documented in http://relaxng.org/tutorial-20011203.html#IDA3PZR. I plan on doing more overrides in order to make the RelaxNG grammar mirror the C code refactoring into a common virStorageSource, but where different clients of that source do not support the same subset of functionality. By starting with something fairly easy to validate, I can make sure my later patches will be possible. This patch adds a use of the no-op <ref name='sourceStartupPolicy'/> to the disksnapshot definition, so that the snapshot version of a type='file' <source> more closely resembles the version in domaincommon. A future patch will merge the two files into using a common define, but this patch is sufficient for testing that adding <source startupPolicy='optional'/> in any of the tests/domainsnapshotxml2xmlin/*.xml files still gets rejected unless it occurs within the <domain> subelement, because the definition of startupPolicy is empty outside of domain.rng. * docs/schemas/storagecommon.rng (storageStartupPolicy) (storageSourceExtra): Create no-op defaults. * docs/schemas/domainsnapshot.rng (domain): Use nested grammar to avoid restricting <domain>. (storageSourceExtra): Create new override. (disksnapshot): Access overrides through common names. * docs/schemas/domaincommon.rng (disk): Access overrides through common names. * docs/schemas/domain.rng (storageStartupPolicy) (storageSourceExtra): Create new overrides. Signed-off-by: Eric Blake <eblake@redhat.com> Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
parent
db7d7c0ee8
commit
369cdfa8f5
@ -1,9 +1,21 @@
|
||||
<?xml version="1.0"?>
|
||||
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
||||
<!-- We handle only document defining a domain -->
|
||||
<!-- Grammar for accepting a domain element, both as top level, and
|
||||
also suitable for inclusion in domainsnapshot.rng -->
|
||||
<start>
|
||||
<ref name="domain"/>
|
||||
</start>
|
||||
|
||||
<include href='domaincommon.rng'/>
|
||||
|
||||
<define name='storageStartupPolicy' combine='choice'>
|
||||
<!-- overrides the no-op version in storagecommon.rng -->
|
||||
<ref name='startupPolicy'/>
|
||||
</define>
|
||||
|
||||
<define name='storageSourceExtra' combine='choice'>
|
||||
<!-- overrides the no-op version in storagecommon.rng -->
|
||||
<ref name='diskspec'/>
|
||||
</define>
|
||||
|
||||
</grammar>
|
||||
|
@ -1213,7 +1213,7 @@
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name="startupPolicy"/>
|
||||
<ref name="storageStartupPolicy"/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='devSeclabel'/>
|
||||
@ -1235,7 +1235,7 @@
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name="startupPolicy"/>
|
||||
<ref name="storageStartupPolicy"/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='devSeclabel'/>
|
||||
@ -1255,7 +1255,7 @@
|
||||
<ref name="absFilePath"/>
|
||||
</attribute>
|
||||
<optional>
|
||||
<ref name="startupPolicy"/>
|
||||
<ref name="storageStartupPolicy"/>
|
||||
</optional>
|
||||
<empty/>
|
||||
</element>
|
||||
@ -1296,7 +1296,7 @@
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name="startupPolicy"/>
|
||||
<ref name="storageStartupPolicy"/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='devSeclabel'/>
|
||||
@ -1306,10 +1306,11 @@
|
||||
</interleave>
|
||||
</group>
|
||||
</choice>
|
||||
<ref name="diskspec"/>
|
||||
<ref name="storageSourceExtra"/>
|
||||
</interleave>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name="diskSourceNetwork">
|
||||
<attribute name="protocol">
|
||||
<choice>
|
||||
|
@ -75,7 +75,12 @@
|
||||
<ref name="UUID"/>
|
||||
</element>
|
||||
</element>
|
||||
<ref name='domain'/>
|
||||
<!-- Nested grammar ensures that any of our overrides of
|
||||
storagecommon/domaincommon defines do not conflict
|
||||
with any domain.rng overrides. -->
|
||||
<grammar>
|
||||
<include href='domain.rng'/>
|
||||
</grammar>
|
||||
</choice>
|
||||
</optional>
|
||||
<optional>
|
||||
@ -102,6 +107,11 @@
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
<define name='storageSourceExtra' combine='choice'>
|
||||
<!-- overrides the no-op version in storagecommon.rng -->
|
||||
<ref name='disksnapshotdriver'/>
|
||||
</define>
|
||||
|
||||
<define name='disksnapshot'>
|
||||
<element name='disk'>
|
||||
<attribute name='name'>
|
||||
@ -138,10 +148,13 @@
|
||||
<ref name='absFilePath'/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='storageStartupPolicy'/>
|
||||
</optional>
|
||||
<empty/>
|
||||
</element>
|
||||
</optional>
|
||||
<ref name='disksnapshotdriver'/>
|
||||
<ref name='storageSourceExtra'/>
|
||||
</interleave>
|
||||
</group>
|
||||
<group>
|
||||
@ -157,7 +170,7 @@
|
||||
<empty/>
|
||||
</element>
|
||||
</optional>
|
||||
<ref name='disksnapshotdriver'/>
|
||||
<ref name='storageSourceExtra'/>
|
||||
</interleave>
|
||||
</group>
|
||||
<group>
|
||||
@ -170,7 +183,7 @@
|
||||
<ref name='diskSourceNetwork'/>
|
||||
</element>
|
||||
</optional>
|
||||
<ref name='disksnapshotdriver'/>
|
||||
<ref name='storageSourceExtra'/>
|
||||
</interleave>
|
||||
</group>
|
||||
</choice>
|
||||
|
@ -79,4 +79,18 @@
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
<define name='storageStartupPolicy'>
|
||||
<!-- Use a combine='choice' override in client files that want to
|
||||
add additional attributes to a <source> sub-element
|
||||
associated with a storage source -->
|
||||
<notAllowed/>
|
||||
</define>
|
||||
|
||||
<define name='storageSourceExtra'>
|
||||
<!-- Use a combine='choice' override in client files that want to
|
||||
add additional elements as siblings of a <source> sub-element
|
||||
associated with a storage source -->
|
||||
<notAllowed/>
|
||||
</define>
|
||||
|
||||
</grammar>
|
||||
|
10
tests/domainsnapshotxml2xmlin/disk-invalid.xml
Normal file
10
tests/domainsnapshotxml2xmlin/disk-invalid.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<domainsnapshot>
|
||||
<name>asdf</name>
|
||||
<description>adsf</description>
|
||||
<disks>
|
||||
<disk name='vda' snapshot='external'>
|
||||
<source file='/tmp/foo' startupPolicy='optional'/>
|
||||
<driver/>
|
||||
</disk>
|
||||
</disks>
|
||||
</domainsnapshot>
|
Loading…
Reference in New Issue
Block a user