libvirt/docs/schemas/storagepool.rng
Jason Dillaman 669018bc9c storage: optional 'refresh' elemement on pool
The new 'refresh' element can override the default refresh operations
for a storage pool. The only currently supported override is to set
the volume allocation size to the volume capacity. This can be specified
by adding the following snippet:

<pool>
...
  <refresh>
    <volume allocation='capacity'/>
  </refresh>
...
</pool>

This is useful for certain backends where computing the actual allocation
of a volume might be an expensive operation.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
2019-03-19 16:46:21 +01:00

755 lines
17 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='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='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='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='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='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='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='sourceiscsidirect'/>
</interleave>
</define>
<define name='poolscsi'>
<attribute name='type'>
<value>scsi</value>
</attribute>
<interleave>
<ref name='commonmetadata'/>
<ref name='sizing'/>
<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'/>
<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='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='sourcesheepdog'/>
</interleave>
</define>
<define name='poolgluster'>
<attribute name='type'>
<value>gluster</value>
</attribute>
<interleave>
<ref name='commonMetadataNameOptional'/>
<ref name='sizing'/>
<ref name='sourcegluster'/>
</interleave>
</define>
<define name='poolzfs'>
<attribute name='type'>
<value>zfs</value>
</attribute>
<interleave>
<ref name='commonMetadataNameOptional'/>
<ref name='sizing'/>
<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='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='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'>
<text/>
</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>
</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>