[libvirt] [PATCHv2] storage: allow interleave in volume XML
Osier Yang
jyang at redhat.com
Mon Nov 25 04:24:37 UTC 2013
On 23/11/13 03:54, Eric Blake wrote:
> 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 at redhat.com>
> ---
>
> v2: correct version (actually applies to libvirt.git, rather
> than depending on unpublished intermediate commits)
>
> reviewer's note: see bottom for easier-to-review schema change
>
> docs/schemas/storagevol.rng | 138 +++++++++++++------------
> tests/storagevolxml2xmlin/vol-file-backing.xml | 15 +--
> 2 files changed, 82 insertions(+), 71 deletions(-)
>
> diff --git a/docs/schemas/storagevol.rng b/docs/schemas/storagevol.rng
> index 5da8e1f..e79bc35 100644
> --- a/docs/schemas/storagevol.rng
> +++ b/docs/schemas/storagevol.rng
> @@ -13,55 +13,61 @@
>
> <define name='vol'>
> <element name='volume'>
> - <element name='name'>
> - <ref name='volName'/>
> - </element>
> - <optional>
> - <element name='key'>
> - <text/>
> + <interleave>
> + <element name='name'>
> + <ref name='volName'/>
> </element>
> - </optional>
> - <optional>
> - <ref name='source'/>
> - </optional>
> - <ref name='sizing'/>
> - <ref name='target'/>
> - <optional>
> - <ref name='backingStore'/>
> - </optional>
> + <optional>
> + <element name='key'>
> + <text/>
> + </element>
> + </optional>
> + <optional>
> + <ref name='source'/>
> + </optional>
> + <ref name='sizing'/>
> + <ref name='target'/>
> + <optional>
> + <ref name='backingStore'/>
> + </optional>
> + </interleave>
> </element>
> </define>
>
> <define name='sizing'>
> - <optional>
> - <element name='capacity'>
> - <ref name='scaledInteger'/>
> - </element>
> - </optional>
> - <optional>
> - <element name='allocation'>
> - <ref name='scaledInteger'/>
> - </element>
> - </optional>
> + <interleave>
> + <optional>
> + <element name='capacity'>
> + <ref name='scaledInteger'/>
> + </element>
> + </optional>
> + <optional>
> + <element name='allocation'>
> + <ref name='scaledInteger'/>
> + </element>
> + </optional>
> + </interleave>
> </define>
>
> <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>
> @@ -103,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>
ACK
More information about the libvir-list
mailing list