[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