Start reflecting the C source code by moving RelaxNG grammar
for virStorageSource into a common file. There's still more
to move, but doing it in pieces makes it easier to validate.
* docs/schemas/domaincommon.rng (diskSourceFile, diskSourceBlock)
(diskSourceDir, diskSourceNetwork, diskSourceVolume)
(devSeclabel): Move...
* docs/schemas/storagecommon.rng (storageSourceFile)
(storageSourceBlock, storageSourceDir, storageSourceNetwork)
(storageSourceVolume, devSeclabel): ...and rename.
(storageSourceExtra): New define.
* docs/schemas/domainsnapshot.rng (disksnapshotsource): Update
client.
(diskspec): Change override...
(storageSourceExtra): ...into combine.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
docs/schemas/domaincommon.rng | 215 ++--------------------------------------
docs/schemas/domainsnapshot.rng | 17 ++--
docs/schemas/storagecommon.rng | 212 +++++++++++++++++++++++++++++++++++++++
3 files changed, 228 insertions(+), 216 deletions(-)
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 6de41b0..80b58e8 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -71,6 +71,7 @@
</element>
</define>
<define name="seclabel">
+ <!-- see also devseclabel in storagecommon.rng -->
<element name="seclabel">
<optional>
<attribute name='model'>
@@ -149,42 +150,7 @@
</choice>
</element>
</define>
- <define name="devSeclabel">
- <element name="seclabel">
- <!-- A per-device seclabel override is more limited, either
- relabel=no or a <label> must be present on input;
- output also can include labelskip=yes. -->
- <optional>
- <attribute name='model'>
- <text/>
- </attribute>
- </optional>
- <choice>
- <group>
- <attribute name='relabel'>
- <value>no</value>
- </attribute>
- </group>
- <group>
- <attribute name='labelskip'>
- <value>yes</value>
- </attribute>
- </group>
- <group>
- <optional>
- <attribute name='relabel'>
- <value>yes</value>
- </attribute>
- </optional>
- <oneOrMore>
- <element name='label'>
- <text/>
- </element>
- </oneOrMore>
- </group>
- </choice>
- </element>
- </define>
+
<define name="hvs">
<attribute name="type">
<choice>
@@ -1193,179 +1159,16 @@
<define name="diskSource">
<choice>
- <ref name="diskSourceFile"/>
- <ref name="diskSourceBlock"/>
- <ref name="diskSourceDir"/>
- <ref name="diskSourceNetwork"/>
- <ref name="diskSourceVolume"/>
+ <ref name="storageSourceFile"/>
+ <ref name="storageSourceBlock"/>
+ <ref name="storageSourceDir"/>
+ <ref name="storageSourceNetwork"/>
+ <ref name="storageSourceVolume"/>
</choice>
</define>
- <define name="diskSourceFile">
- <optional>
- <attribute name="type">
- <value>file</value>
- </attribute>
- </optional>
- <interleave>
- <optional>
- <element name="source">
- <optional>
- <attribute name="file">
- <ref name="absFilePath"/>
- </attribute>
- </optional>
- <optional>
- <ref name="startupPolicy"/>
- </optional>
- <optional>
- <ref name='devSeclabel'/>
- </optional>
- </element>
- </optional>
- <ref name='diskspec'/>
- </interleave>
- </define>
-
- <define name="diskSourceBlock">
- <attribute name="type">
- <value>block</value>
- </attribute>
- <interleave>
- <optional>
- <element name="source">
- <optional>
- <attribute name="dev">
- <ref name="absFilePath"/>
- </attribute>
- </optional>
- <optional>
- <ref name="startupPolicy"/>
- </optional>
- <optional>
- <ref name='devSeclabel'/>
- </optional>
- </element>
- </optional>
- <ref name='diskspec'/>
- </interleave>
- </define>
-
- <define name="diskSourceDir">
- <attribute name="type">
- <value>dir</value>
- </attribute>
- <interleave>
- <optional>
- <element name="source">
- <attribute name="dir">
- <ref name="absFilePath"/>
- </attribute>
- <optional>
- <ref name="startupPolicy"/>
- </optional>
- <empty/>
- </element>
- </optional>
- <ref name='diskspec'/>
- </interleave>
- </define>
-
- <define name="diskSourceNetwork">
- <attribute name="type">
- <value>network</value>
- </attribute>
- <interleave>
- <element name="source">
- <attribute name="protocol">
- <choice>
- <value>nbd</value>
- <value>rbd</value>
- <value>sheepdog</value>
- <value>gluster</value>
- <value>iscsi</value>
- <value>http</value>
- <value>https</value>
- <value>ftp</value>
- <value>ftps</value>
- <value>tftp</value>
- </choice>
- </attribute>
- <optional>
- <attribute name="name"/>
- </optional>
- <zeroOrMore>
- <element name="host">
- <choice>
- <group>
- <optional>
- <attribute name="transport">
- <choice>
- <value>tcp</value>
- <value>rdma</value>
- </choice>
- </attribute>
- </optional>
- <attribute name="name">
- <choice>
- <ref name="dnsName"/>
- <ref name="ipAddr"/>
- </choice>
- </attribute>
- <optional>
- <attribute name="port">
- <ref name="unsignedInt"/>
- </attribute>
- </optional>
- </group>
- <group>
- <attribute name="transport">
- <value>unix</value>
- </attribute>
- <attribute name="socket">
- <ref name="absFilePath"/>
- </attribute>
- </group>
- </choice>
- </element>
- </zeroOrMore>
- <empty/>
- </element>
- <ref name='diskspec'/>
- </interleave>
- </define>
-
- <define name="diskSourceVolume">
- <attribute name="type">
- <value>volume</value>
- </attribute>
- <interleave>
- <optional>
- <element name="source">
- <attribute name="pool">
- <ref name="genericName"/>
- </attribute>
- <attribute name="volume">
- <ref name="volName"/>
- </attribute>
- <optional>
- <attribute name="mode">
- <choice>
- <value>host</value>
- <value>direct</value>
- </choice>
- </attribute>
- </optional>
- <optional>
- <ref name="startupPolicy"/>
- </optional>
- <optional>
- <ref name='devSeclabel'/>
- </optional>
- </element>
- </optional>
- <ref name='diskspec'/>
- </interleave>
+ <define name='storageSourceExtra' combine='choice'>
+ <ref name='diskspec'/>
</define>
<define name="diskTarget">
diff --git a/docs/schemas/domainsnapshot.rng b/docs/schemas/domainsnapshot.rng
index 5764e77..dc404ef 100644
--- a/docs/schemas/domainsnapshot.rng
+++ b/docs/schemas/domainsnapshot.rng
@@ -17,13 +17,6 @@
<value>vmdk</value>
</choice>
</define>
-
- <define name="diskspec">
- <!-- Override the domaincommon definition to select just the
- extra elements needed for a snapshot -->
- <ref name='disksnapshotdriver'/>
- </define>
-
</include>
<define name='domainsnapshot'>
@@ -155,12 +148,16 @@
<define name='disksnapshotsource'>
<choice>
- <ref name='diskSourceFile'/>
- <ref name='diskSourceBlock'/>
- <ref name='diskSourceNetwork'/>
+ <ref name='storageSourceFile'/>
+ <ref name='storageSourceBlock'/>
+ <ref name='storageSourceNetwork'/>
</choice>
</define>
+ <define name='storageSourceExtra' combine='choice'>
+ <ref name='disksnapshotdriver'/>
+ </define>
+
<define name='disksnapshotdriver'>
<optional>
<element name='driver'>
diff --git a/docs/schemas/storagecommon.rng b/docs/schemas/storagecommon.rng
index 0fa90b8..ef0f62f 100644
--- a/docs/schemas/storagecommon.rng
+++ b/docs/schemas/storagecommon.rng
@@ -57,4 +57,216 @@
<notAllowed/>
</define>
+ <define name="devSeclabel">
+ <element name="seclabel">
+ <!-- A per-device seclabel override is more limited than
+ seclabel in domaincommon.rng. Either
+ relabel=no or a <label> must be present on input;
+ output also can include labelskip=yes. -->
+ <optional>
+ <attribute name='model'>
+ <text/>
+ </attribute>
+ </optional>
+ <choice>
+ <group>
+ <attribute name='relabel'>
+ <value>no</value>
+ </attribute>
+ </group>
+ <group>
+ <attribute name='labelskip'>
+ <value>yes</value>
+ </attribute>
+ </group>
+ <group>
+ <optional>
+ <attribute name='relabel'>
+ <value>yes</value>
+ </attribute>
+ </optional>
+ <oneOrMore>
+ <element name='label'>
+ <text/>
+ </element>
+ </oneOrMore>
+ </group>
+ </choice>
+ </element>
+ </define>
+
+ <define name='storageSourceExtra'>
+ <!-- Use a combine='choice' in each client file that includes this
+ grammar in order to allow additional elements as siblings of
+ a storage <source> element. -->
+ <notAllowed/>
+ </define>
+
+ <define name="storageSourceFile">
+ <optional>
+ <attribute name="type">
+ <value>file</value>
+ </attribute>
+ </optional>
+ <interleave>
+ <optional>
+ <element name="source">
+ <optional>
+ <attribute name="file">
+ <ref name="absFilePath"/>
+ </attribute>
+ </optional>
+ <optional>
+ <ref name="startupPolicy"/>
+ </optional>
+ <optional>
+ <ref name='devSeclabel'/>
+ </optional>
+ </element>
+ </optional>
+ <ref name='storageSourceExtra'/>
+ </interleave>
+ </define>
+
+ <define name="storageSourceBlock">
+ <attribute name="type">
+ <value>block</value>
+ </attribute>
+ <interleave>
+ <optional>
+ <element name="source">
+ <optional>
+ <attribute name="dev">
+ <ref name="absFilePath"/>
+ </attribute>
+ </optional>
+ <optional>
+ <ref name="startupPolicy"/>
+ </optional>
+ <optional>
+ <ref name='devSeclabel'/>
+ </optional>
+ </element>
+ </optional>
+ <ref name='storageSourceExtra'/>
+ </interleave>
+ </define>
+
+ <define name="storageSourceDir">
+ <attribute name="type">
+ <value>dir</value>
+ </attribute>
+ <interleave>
+ <optional>
+ <element name="source">
+ <attribute name="dir">
+ <ref name="absFilePath"/>
+ </attribute>
+ <optional>
+ <ref name="startupPolicy"/>
+ </optional>
+ <empty/>
+ </element>
+ </optional>
+ <ref name='storageSourceExtra'/>
+ </interleave>
+ </define>
+
+ <define name="storageSourceNetwork">
+ <attribute name="type">
+ <value>network</value>
+ </attribute>
+ <interleave>
+ <element name="source">
+ <attribute name="protocol">
+ <choice>
+ <value>nbd</value>
+ <value>rbd</value>
+ <value>sheepdog</value>
+ <value>gluster</value>
+ <value>iscsi</value>
+ <value>http</value>
+ <value>https</value>
+ <value>ftp</value>
+ <value>ftps</value>
+ <value>tftp</value>
+ </choice>
+ </attribute>
+ <optional>
+ <attribute name="name"/>
+ </optional>
+ <zeroOrMore>
+ <element name="host">
+ <choice>
+ <group>
+ <optional>
+ <attribute name="transport">
+ <choice>
+ <value>tcp</value>
+ <value>rdma</value>
+ </choice>
+ </attribute>
+ </optional>
+ <attribute name="name">
+ <choice>
+ <ref name="dnsName"/>
+ <ref name="ipAddr"/>
+ </choice>
+ </attribute>
+ <optional>
+ <attribute name="port">
+ <ref name="unsignedInt"/>
+ </attribute>
+ </optional>
+ </group>
+ <group>
+ <attribute name="transport">
+ <value>unix</value>
+ </attribute>
+ <attribute name="socket">
+ <ref name="absFilePath"/>
+ </attribute>
+ </group>
+ </choice>
+ </element>
+ </zeroOrMore>
+ <empty/>
+ </element>
+ <ref name='storageSourceExtra'/>
+ </interleave>
+ </define>
+
+ <define name="storageSourceVolume">
+ <attribute name="type">
+ <value>volume</value>
+ </attribute>
+ <interleave>
+ <optional>
+ <element name="source">
+ <attribute name="pool">
+ <ref name="genericName"/>
+ </attribute>
+ <attribute name="volume">
+ <ref name="volName"/>
+ </attribute>
+ <optional>
+ <attribute name="mode">
+ <choice>
+ <value>host</value>
+ <value>direct</value>
+ </choice>
+ </attribute>
+ </optional>
+ <optional>
+ <ref name="startupPolicy"/>
+ </optional>
+ <optional>
+ <ref name='devSeclabel'/>
+ </optional>
+ </element>
+ </optional>
+ <ref name='storageSourceExtra'/>
+ </interleave>
+ </define>
+
</grammar>
--
1.9.0