The RNG grammar did not allow arbitrary interleaving, which makes it harder than necessary to create a new volume from handwritten XML. (Compare also to commit caf516db for pools). * docs/schemas/storagevol.rng: Support interleaving. * tests/storagevolxml2xmlin/vol-file-backing.xml: Test it. Signed-off-by: Eric Blake <eblake@xxxxxxxxxx> --- reviewer's note: Look after the '-- ' trailer for a smaller version of the patch generated with 'git diff -w'; that version won't apply, but makes it easier to see the real changes rather than getting lost in indentation. docs/schemas/storagevol.rng | 92 ++++++++++++++------------ tests/storagevolxml2xmlin/vol-file-backing.xml | 15 +++-- 2 files changed, 57 insertions(+), 50 deletions(-) diff --git a/docs/schemas/storagevol.rng b/docs/schemas/storagevol.rng index ff7a952..e79bc35 100644 --- a/docs/schemas/storagevol.rng +++ b/docs/schemas/storagevol.rng @@ -12,8 +12,8 @@ <define name='vol'> - <interleave> - <element name='volume'> + <element name='volume'> + <interleave> <element name='name'> <ref name='volName'/> </element> @@ -30,8 +30,8 @@ <optional> <ref name='backingStore'/> </optional> - </element> - </interleave> + </interleave> + </element> </define> <define name='sizing'> @@ -52,20 +52,22 @@ <define name='permissions'> <optional> <element name='permissions'> - <element name='mode'> - <ref name='octalMode'/> - </element> - <element name='owner'> - <ref name='unsignedInt'/> - </element> - <element name='group'> - <ref name='unsignedInt'/> - </element> - <optional> - <element name='label'> - <text/> - </element> - </optional> + <interleave> + <element name='mode'> + <ref name='octalMode'/> + </element> + <element name='owner'> + <ref name='unsignedInt'/> + </element> + <element name='group'> + <ref name='unsignedInt'/> + </element> + <optional> + <element name='label'> + <text/> + </element> + </optional> + </interleave> </element> </optional> </define> @@ -107,36 +109,40 @@ <define name='target'> <element name='target'> - <optional> - <element name='path'> - <choice> - <data type='anyURI'/> - <ref name='absFilePath'/> - </choice> - </element> - </optional> - <ref name='format'/> - <ref name='permissions'/> - <ref name='timestamps'/> - <optional> - <ref name='encryption'/> - </optional> - <optional> - <ref name='compat'/> - </optional> - <optional> - <ref name='fileFormatFeatures'/> - </optional> + <interleave> + <optional> + <element name='path'> + <choice> + <data type='anyURI'/> + <ref name='absFilePath'/> + </choice> + </element> + </optional> + <ref name='format'/> + <ref name='permissions'/> + <ref name='timestamps'/> + <optional> + <ref name='encryption'/> + </optional> + <optional> + <ref name='compat'/> + </optional> + <optional> + <ref name='fileFormatFeatures'/> + </optional> + </interleave> </element> </define> <define name='backingStore'> <element name='backingStore'> - <element name='path'> - <ref name='absFilePath'/> - </element> - <ref name='format'/> - <ref name='permissions'/> + <interleave> + <element name='path'> + <ref name='absFilePath'/> + </element> + <ref name='format'/> + <ref name='permissions'/> + </interleave> </element> </define> diff --git a/tests/storagevolxml2xmlin/vol-file-backing.xml b/tests/storagevolxml2xmlin/vol-file-backing.xml index 73e7f28..8610ea4 100644 --- a/tests/storagevolxml2xmlin/vol-file-backing.xml +++ b/tests/storagevolxml2xmlin/vol-file-backing.xml @@ -1,25 +1,26 @@ <volume> - <name>sparse.img</name> + <!-- lines scrambled to test interleaves --> <key>/var/lib/libvirt/images/sparse.img</key> - <source/> <capacity unit='GB'>10</capacity> - <allocation unit='MiB'>0</allocation> + <source/> <target> - <path>/var/lib/libvirt/images/sparse.img</path> <permissions> - <mode>0</mode> <owner>0744</owner> + <mode>0</mode> <group>0</group> </permissions> + <path>/var/lib/libvirt/images/sparse.img</path> </target> + <allocation unit='MiB'>0</allocation> <backingStore> - <path>/var/lib/virt/images/master.img</path> <format type='vmdk'/> + <path>/var/lib/virt/images/master.img</path> <permissions> <mode>0744</mode> + <label>virt_image_t</label> <owner>1</owner> <group>1</group> - <label>virt_image_t</label> </permissions> </backingStore> + <name>sparse.img</name> </volume> -- 1.8.3.1 As promised above, the docs/schemas change in an easier format: diff --git c/docs/schemas/storagevol.rng w/docs/schemas/storagevol.rng index ff7a952..e79bc35 100644 --- c/docs/schemas/storagevol.rng +++ w/docs/schemas/storagevol.rng @@ -12,8 +12,8 @@ <define name='vol'> - <interleave> <element name='volume'> + <interleave> <element name='name'> <ref name='volName'/> </element> @@ -30,8 +30,8 @@ <optional> <ref name='backingStore'/> </optional> - </element> </interleave> + </element> </define> <define name='sizing'> @@ -52,6 +52,7 @@ <define name='permissions'> <optional> <element name='permissions'> + <interleave> <element name='mode'> <ref name='octalMode'/> </element> @@ -66,6 +67,7 @@ <text/> </element> </optional> + </interleave> </element> </optional> </define> @@ -107,6 +109,7 @@ <define name='target'> <element name='target'> + <interleave> <optional> <element name='path'> <choice> @@ -127,16 +130,19 @@ <optional> <ref name='fileFormatFeatures'/> </optional> + </interleave> </element> </define> <define name='backingStore'> <element name='backingStore'> + <interleave> <element name='path'> <ref name='absFilePath'/> </element> <ref name='format'/> <ref name='permissions'/> + </interleave> </element> </define> -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list