libvirt/docs/schemas/storagepool.rng
Peter Krempa 1a3c07989b schema: Add define for object names
Objects such as domain, pool, etc re-define the regex for the format.
Add more generic types for objects with/without a slash which we'll be
able to reuse also for other objects.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2021-01-08 09:18:21 +01:00

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="objectName"/>
</element>
</optional>
<optional>
<element name="uuid">
<ref name="UUID"/>
</element>
</optional>
</interleave>
</define>
<define name="commonmetadata">
<interleave>
<element name="name">
<ref name="objectName"/>
</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>