mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-26 15:45:28 +00:00
bb8ccb050d
The storage pool code now attempts to disable COW by default on btrfs, but management applications may wish to override this behaviour. Thus we introduce a concept of storage pool features: <features> <cow state='yes|no'/> </features> If the <cow> feature policy is set, it will be enforced. It will always return an hard error if COW cannot be explicitly set or unset. Reviewed-by: Neal Gompa <ngompa13@gmail.com> Reviewed-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
789 lines
18 KiB
XML
789 lines
18 KiB
XML
<?xml version="1.0"?>
|
|
<!-- A Relax NG schema for the libvirt storage pool XML format -->
|
|
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
|
|
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
|
<include href='basictypes.rng'/>
|
|
<include href='storagecommon.rng'/>
|
|
<start>
|
|
<ref name='pool'/>
|
|
</start>
|
|
|
|
|
|
<define name='pool'>
|
|
<element name='pool'>
|
|
<choice>
|
|
<ref name='pooldir'/>
|
|
<ref name='poolfs'/>
|
|
<ref name='poolnetfs'/>
|
|
<ref name='poollogical'/>
|
|
<ref name='pooldisk'/>
|
|
<ref name='pooliscsi'/>
|
|
<ref name='pooliscsidirect'/>
|
|
<ref name='poolscsi'/>
|
|
<ref name='poolmpath'/>
|
|
<ref name='poolrbd'/>
|
|
<ref name='poolsheepdog'/>
|
|
<ref name='poolgluster'/>
|
|
<ref name='poolzfs'/>
|
|
<ref name='poolvstorage'/>
|
|
</choice>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='pooldir'>
|
|
<attribute name='type'>
|
|
<value>dir</value>
|
|
</attribute>
|
|
<interleave>
|
|
<ref name='commonmetadata'/>
|
|
<ref name='sizing'/>
|
|
<ref name='features'/>
|
|
<ref name='sourcedir'/>
|
|
<ref name='target'/>
|
|
</interleave>
|
|
</define>
|
|
|
|
<define name='poolfs'>
|
|
<attribute name='type'>
|
|
<value>fs</value>
|
|
</attribute>
|
|
<interleave>
|
|
<ref name='commonmetadata'/>
|
|
<ref name='sizing'/>
|
|
<ref name='features'/>
|
|
<ref name='sourcefs'/>
|
|
<ref name='target'/>
|
|
</interleave>
|
|
<optional>
|
|
<ref name='fs_mount_opts'/>
|
|
</optional>
|
|
</define>
|
|
|
|
<define name='poolnetfs'>
|
|
<attribute name='type'>
|
|
<value>netfs</value>
|
|
</attribute>
|
|
<interleave>
|
|
<ref name='commonmetadata'/>
|
|
<ref name='sizing'/>
|
|
<ref name='features'/>
|
|
<ref name='sourcenetfs'/>
|
|
<ref name='target'/>
|
|
</interleave>
|
|
<optional>
|
|
<ref name='fs_mount_opts'/>
|
|
</optional>
|
|
</define>
|
|
|
|
<define name='poollogical'>
|
|
<attribute name='type'>
|
|
<value>logical</value>
|
|
</attribute>
|
|
<interleave>
|
|
<ref name='commonMetadataNameOptional'/>
|
|
<ref name='sizing'/>
|
|
<ref name='features'/>
|
|
<ref name='sourcelogical'/>
|
|
<ref name='targetlogical'/>
|
|
</interleave>
|
|
</define>
|
|
|
|
<define name='pooldisk'>
|
|
<attribute name='type'>
|
|
<value>disk</value>
|
|
</attribute>
|
|
<interleave>
|
|
<ref name='commonmetadata'/>
|
|
<ref name='sizing'/>
|
|
<ref name='features'/>
|
|
<ref name='sourcedisk'/>
|
|
<ref name='target'/>
|
|
</interleave>
|
|
</define>
|
|
|
|
<define name='pooliscsi'>
|
|
<attribute name='type'>
|
|
<value>iscsi</value>
|
|
</attribute>
|
|
<interleave>
|
|
<ref name='commonmetadata'/>
|
|
<ref name='sizing'/>
|
|
<ref name='features'/>
|
|
<ref name='sourceiscsi'/>
|
|
<ref name='target'/>
|
|
</interleave>
|
|
</define>
|
|
|
|
<define name='pooliscsidirect'>
|
|
<attribute name='type'>
|
|
<value>iscsi-direct</value>
|
|
</attribute>
|
|
<interleave>
|
|
<ref name='commonmetadata'/>
|
|
<optional>
|
|
<ref name='sizing'/>
|
|
</optional>
|
|
<ref name='features'/>
|
|
<ref name='sourceiscsidirect'/>
|
|
</interleave>
|
|
</define>
|
|
|
|
<define name='poolscsi'>
|
|
<attribute name='type'>
|
|
<value>scsi</value>
|
|
</attribute>
|
|
<interleave>
|
|
<ref name='commonmetadata'/>
|
|
<ref name='sizing'/>
|
|
<ref name='features'/>
|
|
<ref name='sourcescsi'/>
|
|
<ref name='target'/>
|
|
</interleave>
|
|
</define>
|
|
|
|
<define name='poolmpath'>
|
|
<attribute name='type'>
|
|
<value>mpath</value>
|
|
</attribute>
|
|
<interleave>
|
|
<ref name='commonmetadata'/>
|
|
<ref name='sizing'/>
|
|
<ref name='features'/>
|
|
<optional>
|
|
<ref name='sourcempath'/>
|
|
</optional>
|
|
<ref name='target'/>
|
|
</interleave>
|
|
</define>
|
|
|
|
<define name='poolrbd'>
|
|
<attribute name='type'>
|
|
<value>rbd</value>
|
|
</attribute>
|
|
<interleave>
|
|
<ref name='commonMetadataNameOptional'/>
|
|
<ref name='sizing'/>
|
|
<ref name='features'/>
|
|
<ref name='sourcerbd'/>
|
|
<ref name='refresh'/>
|
|
</interleave>
|
|
<optional>
|
|
<ref name='rbd_config_opts'/>
|
|
</optional>
|
|
</define>
|
|
|
|
<define name='poolsheepdog'>
|
|
<attribute name='type'>
|
|
<value>sheepdog</value>
|
|
</attribute>
|
|
<interleave>
|
|
<ref name='commonMetadataNameOptional'/>
|
|
<ref name='sizing'/>
|
|
<ref name='features'/>
|
|
<ref name='sourcesheepdog'/>
|
|
</interleave>
|
|
</define>
|
|
|
|
<define name='poolgluster'>
|
|
<attribute name='type'>
|
|
<value>gluster</value>
|
|
</attribute>
|
|
<interleave>
|
|
<ref name='commonMetadataNameOptional'/>
|
|
<ref name='sizing'/>
|
|
<ref name='features'/>
|
|
<ref name='sourcegluster'/>
|
|
</interleave>
|
|
</define>
|
|
|
|
<define name='poolzfs'>
|
|
<attribute name='type'>
|
|
<value>zfs</value>
|
|
</attribute>
|
|
<interleave>
|
|
<ref name='commonMetadataNameOptional'/>
|
|
<ref name='sizing'/>
|
|
<ref name='features'/>
|
|
<ref name='sourcezfs'/>
|
|
<optional>
|
|
<ref name='target'/>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
|
|
<define name='poolvstorage'>
|
|
<attribute name='type'>
|
|
<value>vstorage</value>
|
|
</attribute>
|
|
<interleave>
|
|
<ref name='commonMetadataNameOptional'/>
|
|
<ref name='sizing'/>
|
|
<ref name='features'/>
|
|
<ref name='sourcevstorage'/>
|
|
<ref name='target'/>
|
|
</interleave>
|
|
</define>
|
|
|
|
<define name='sourceinfovendor'>
|
|
<interleave>
|
|
<optional>
|
|
<element name='vendor'>
|
|
<attribute name='name'>
|
|
<text/>
|
|
</attribute>
|
|
</element>
|
|
</optional>
|
|
<optional>
|
|
<element name='product'>
|
|
<attribute name='name'>
|
|
<text/>
|
|
</attribute>
|
|
</element>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
|
|
<define name='commonMetadataNameOptional'>
|
|
<interleave>
|
|
<optional>
|
|
<element name='name'>
|
|
<ref name='poolName'/>
|
|
</element>
|
|
</optional>
|
|
<optional>
|
|
<element name='uuid'>
|
|
<ref name='UUID'/>
|
|
</element>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
|
|
<define name='commonmetadata'>
|
|
<interleave>
|
|
<element name='name'>
|
|
<ref name='poolName'/>
|
|
</element>
|
|
<optional>
|
|
<element name='uuid'>
|
|
<ref name='UUID'/>
|
|
</element>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
|
|
<define name='sizing'>
|
|
<interleave>
|
|
<optional>
|
|
<element name='capacity'>
|
|
<ref name='scaledInteger'/>
|
|
</element>
|
|
</optional>
|
|
<optional>
|
|
<element name='allocation'>
|
|
<ref name='scaledInteger'/>
|
|
</element>
|
|
</optional>
|
|
<optional>
|
|
<element name='available'>
|
|
<ref name='scaledInteger'/>
|
|
</element>
|
|
</optional>
|
|
</interleave>
|
|
</define>
|
|
|
|
<define name='features'>
|
|
<optional>
|
|
<element name='features'>
|
|
<interleave>
|
|
<optional>
|
|
<element name='cow'>
|
|
<attribute name="state">
|
|
<ref name='virYesNo'/>
|
|
</attribute>
|
|
</element>
|
|
</optional>
|
|
</interleave>
|
|
</element>
|
|
</optional>
|
|
</define>
|
|
|
|
<define name='target'>
|
|
<element name='target'>
|
|
<interleave>
|
|
<element name='path'>
|
|
<ref name='absFilePath'/>
|
|
</element>
|
|
<ref name='permissions'/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='targetlogical'>
|
|
<element name='target'>
|
|
<interleave>
|
|
<optional>
|
|
<element name='path'>
|
|
<ref name='absFilePath'/>
|
|
</element>
|
|
</optional>
|
|
<ref name='permissions'/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourceinfohost'>
|
|
<oneOrMore>
|
|
<element name='host'>
|
|
<attribute name='name'>
|
|
<choice>
|
|
<ref name="dnsName"/>
|
|
<ref name="ipAddr"/>
|
|
</choice>
|
|
</attribute>
|
|
<optional>
|
|
<attribute name='port'>
|
|
<ref name="PortNumber"/>
|
|
</attribute>
|
|
</optional>
|
|
<empty/>
|
|
</element>
|
|
</oneOrMore>
|
|
</define>
|
|
|
|
<define name='sourceinfodev'>
|
|
<element name='device'>
|
|
<attribute name='path'>
|
|
<choice>
|
|
<ref name='absFilePath'/>
|
|
<ref name='genericName'/>
|
|
<ref name='IscsiQualifiedName'/>
|
|
</choice>
|
|
</attribute>
|
|
<choice>
|
|
<empty/>
|
|
<ref name='devextents'/>
|
|
</choice>
|
|
<optional>
|
|
<attribute name="part_separator">
|
|
<ref name="virYesNo"/>
|
|
</attribute>
|
|
</optional>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourceinfodeviscsidirect'>
|
|
<element name='device'>
|
|
<attribute name='path'>
|
|
<ref name='IscsiQualifiedName'/>
|
|
</attribute>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='devextents'>
|
|
<oneOrMore>
|
|
<element name='freeExtent'>
|
|
<attribute name='start'>
|
|
<ref name='unsignedLong'/>
|
|
</attribute>
|
|
<attribute name='end'>
|
|
<ref name='unsignedLong'/>
|
|
</attribute>
|
|
</element>
|
|
</oneOrMore>
|
|
</define>
|
|
|
|
<define name='sourceinfodir'>
|
|
<element name='dir'>
|
|
<attribute name='path'>
|
|
<ref name='absDirPath'/>
|
|
</attribute>
|
|
<empty/>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourceinfonetrelativepath'>
|
|
<element name='dir'>
|
|
<attribute name='path'>
|
|
<ref name='dirPath'/>
|
|
</attribute>
|
|
<empty/>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourceinfoname'>
|
|
<element name='name'>
|
|
<text/>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourceinfoauth'>
|
|
<element name='auth'>
|
|
<attribute name='type'>
|
|
<choice>
|
|
<value>chap</value>
|
|
<value>ceph</value>
|
|
</choice>
|
|
</attribute>
|
|
<attribute name='username'>
|
|
<text/>
|
|
</attribute>
|
|
<ref name='sourceinfoauthsecret'/>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourceinfoauthsecret'>
|
|
<element name='secret'>
|
|
<choice>
|
|
<attribute name='uuid'>
|
|
<text/>
|
|
</attribute>
|
|
<attribute name='usage'>
|
|
<text/>
|
|
</attribute>
|
|
</choice>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourcezfs'>
|
|
<element name='source'>
|
|
<interleave>
|
|
<ref name='sourceinfoname'/>
|
|
<optional>
|
|
<ref name='sourceinfodev'/>
|
|
</optional>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourcevstorage'>
|
|
<element name='source'>
|
|
<interleave>
|
|
<ref name='sourceinfoname'/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourcefmtfs'>
|
|
<optional>
|
|
<element name='format'>
|
|
<attribute name='type'>
|
|
<choice>
|
|
<value>auto</value>
|
|
<value>ext2</value>
|
|
<value>ext3</value>
|
|
<value>ext4</value>
|
|
<value>ufs</value>
|
|
<value>iso9660</value>
|
|
<value>udf</value>
|
|
<value>gfs</value>
|
|
<value>gfs2</value>
|
|
<value>vfat</value>
|
|
<value>hfs+</value>
|
|
<value>xfs</value>
|
|
<value>ocfs2</value>
|
|
<value>vmfs</value>
|
|
</choice>
|
|
</attribute>
|
|
</element>
|
|
</optional>
|
|
</define>
|
|
|
|
|
|
<define name='sourcefmtnetfs'>
|
|
<optional>
|
|
<element name='format'>
|
|
<attribute name='type'>
|
|
<choice>
|
|
<value>auto</value>
|
|
<value>nfs</value>
|
|
</choice>
|
|
</attribute>
|
|
</element>
|
|
</optional>
|
|
</define>
|
|
|
|
|
|
<define name='sourcefmtdisk'>
|
|
<optional>
|
|
<element name='format'>
|
|
<attribute name='type'>
|
|
<choice>
|
|
<value>unknown</value>
|
|
<value>dos</value>
|
|
<value>dvh</value>
|
|
<value>gpt</value>
|
|
<value>mac</value>
|
|
<value>bsd</value>
|
|
<value>pc98</value>
|
|
<value>sun</value>
|
|
<value>lvm2</value>
|
|
</choice>
|
|
</attribute>
|
|
<optional>
|
|
<ref name='sourceinfovendor'/>
|
|
</optional>
|
|
</element>
|
|
</optional>
|
|
</define>
|
|
|
|
|
|
<define name='sourcefmtlogical'>
|
|
<optional>
|
|
<element name='format'>
|
|
<attribute name='type'>
|
|
<choice>
|
|
<value>unknown</value> <!-- back-compat requires keeping 'unknown' not 'auto' -->
|
|
<value>lvm2</value>
|
|
</choice>
|
|
</attribute>
|
|
<optional>
|
|
<ref name='sourceinfovendor'/>
|
|
</optional>
|
|
</element>
|
|
</optional>
|
|
</define>
|
|
|
|
|
|
<define name='sourcedir'>
|
|
<optional>
|
|
<element name='source'>
|
|
<empty/>
|
|
<optional>
|
|
<ref name='sourceinfovendor'/>
|
|
</optional>
|
|
</element>
|
|
</optional>
|
|
</define>
|
|
|
|
<define name='sourcefs'>
|
|
<element name='source'>
|
|
<interleave>
|
|
<ref name='sourceinfodev'/>
|
|
<ref name='sourcefmtfs'/>
|
|
<optional>
|
|
<ref name='sourceinfovendor'/>
|
|
</optional>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourcenetfs'>
|
|
<element name='source'>
|
|
<choice>
|
|
<group>
|
|
<interleave>
|
|
<ref name='sourceinfohost'/>
|
|
<ref name='sourceinfodir'/>
|
|
<ref name='sourcefmtnetfs'/>
|
|
<optional>
|
|
<element name='protocol'>
|
|
<attribute name='ver'>
|
|
<ref name='unsignedInt'/>
|
|
</attribute>
|
|
</element>
|
|
</optional>
|
|
<optional>
|
|
<ref name='sourceinfovendor'/>
|
|
</optional>
|
|
</interleave>
|
|
</group>
|
|
<group>
|
|
<interleave>
|
|
<ref name='sourceinfohost'/>
|
|
<ref name='sourceinfonetrelativepath'/>
|
|
<element name='format'>
|
|
<attribute name='type'>
|
|
<choice>
|
|
<value>cifs</value>
|
|
<value>glusterfs</value>
|
|
</choice>
|
|
</attribute>
|
|
</element>
|
|
<optional>
|
|
<ref name='sourceinfovendor'/>
|
|
</optional>
|
|
</interleave>
|
|
</group>
|
|
</choice>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourcelogical'>
|
|
<element name='source'>
|
|
<interleave>
|
|
<oneOrMore>
|
|
<optional>
|
|
<ref name='sourceinfoname'/>
|
|
</optional>
|
|
<optional>
|
|
<ref name='sourceinfodev'/>
|
|
</optional>
|
|
</oneOrMore>
|
|
<ref name='sourcefmtlogical'/>
|
|
<optional>
|
|
<ref name='sourceinfovendor'/>
|
|
</optional>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourcedisk'>
|
|
<element name='source'>
|
|
<interleave>
|
|
<ref name='sourceinfodev'/>
|
|
<ref name='sourcefmtdisk'/>
|
|
<optional>
|
|
<ref name='sourceinfovendor'/>
|
|
</optional>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourceiscsi'>
|
|
<element name='source'>
|
|
<interleave>
|
|
<ref name='sourceinfohost'/>
|
|
<ref name='sourceinfodev'/>
|
|
<optional>
|
|
<ref name='initiatorinfo'/>
|
|
</optional>
|
|
<optional>
|
|
<ref name='sourceinfoauth'/>
|
|
</optional>
|
|
<optional>
|
|
<ref name='sourceinfovendor'/>
|
|
</optional>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourceiscsidirect'>
|
|
<element name='source'>
|
|
<interleave>
|
|
<ref name='sourceinfohost'/>
|
|
<ref name='sourceinfodeviscsidirect'/>
|
|
<ref name='initiatorinfo'/>
|
|
<optional>
|
|
<ref name='sourceinfoauth'/>
|
|
</optional>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourcescsi'>
|
|
<element name='source'>
|
|
<interleave>
|
|
<ref name='sourceinfoadapter'/>
|
|
<optional>
|
|
<ref name='sourceinfovendor'/>
|
|
</optional>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourcempath'>
|
|
<element name='source'>
|
|
<empty/>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourcerbd'>
|
|
<element name='source'>
|
|
<interleave>
|
|
<ref name='sourceinfoname'/>
|
|
<ref name='sourceinfohost'/>
|
|
<optional>
|
|
<ref name='sourceinfoauth'/>
|
|
</optional>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourcesheepdog'>
|
|
<element name='source'>
|
|
<interleave>
|
|
<ref name='sourceinfohost'/>
|
|
<ref name='sourceinfoname'/>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='sourcegluster'>
|
|
<element name='source'>
|
|
<interleave>
|
|
<ref name='sourceinfohost'/>
|
|
<ref name='sourceinfoname'/>
|
|
<optional>
|
|
<ref name='sourceinfodir'/>
|
|
</optional>
|
|
</interleave>
|
|
</element>
|
|
</define>
|
|
|
|
<define name='IscsiQualifiedName'>
|
|
<data type='string'>
|
|
<param name="pattern">iqn\.[0-9]{4}-(0[1-9]|1[0-2])\.[a-zA-Z0-9\.\-]+(:.+)?</param>
|
|
</data>
|
|
</define>
|
|
|
|
<define name='refresh'>
|
|
<optional>
|
|
<element name='refresh'>
|
|
<interleave>
|
|
<ref name='refreshVolume'/>
|
|
</interleave>
|
|
</element>
|
|
</optional>
|
|
</define>
|
|
|
|
<define name='refreshVolume'>
|
|
<optional>
|
|
<element name='volume'>
|
|
<optional>
|
|
<attribute name='allocation'>
|
|
<ref name="refreshVolumeAllocation"/>
|
|
</attribute>
|
|
</optional>
|
|
</element>
|
|
</optional>
|
|
</define>
|
|
|
|
<!--
|
|
Optional storage pool extensions in their own namespace:
|
|
"fs" or "netfs"
|
|
-->
|
|
|
|
<define name="fs_mount_opts">
|
|
<element name="mount_opts" ns="http://libvirt.org/schemas/storagepool/fs/1.0">
|
|
<zeroOrMore>
|
|
<element name="option">
|
|
<attribute name='name'>
|
|
<text/>
|
|
</attribute>
|
|
</element>
|
|
</zeroOrMore>
|
|
</element>
|
|
</define>
|
|
|
|
<!--
|
|
Optional storage pool extensions in their own namespace:
|
|
RBD
|
|
-->
|
|
|
|
<define name="rbd_config_opts">
|
|
<element name="config_opts" ns="http://libvirt.org/schemas/storagepool/rbd/1.0">
|
|
<zeroOrMore>
|
|
<element name="option">
|
|
<attribute name='name'>
|
|
<text/>
|
|
</attribute>
|
|
<attribute name='value'>
|
|
<text/>
|
|
</attribute>
|
|
</element>
|
|
</zeroOrMore>
|
|
</element>
|
|
</define>
|
|
|
|
</grammar>
|