[libvirt] [PATCH 5/6] conf: move storage source details to common RNG file

Eric Blake eblake at redhat.com
Sun Apr 13 02:27:08 UTC 2014


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 at 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




More information about the libvir-list mailing list