Modify the storagepool.rng to allow for the usage of a different
XML namespace to parse the netfs_mount_opts to be included with
the netfs storage pool definition.
Modify the storagepoolxml2xmltest to utilize a properly modified
XML file to parse and format the namespace for a netfs storage pool.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
docs/formatstorage.html.in | 59 +++++++++++++++++++
docs/schemas/storagepool.rng | 20 +++++++
tests/Makefile.am | 4 +-
.../pool-netfs-ns-mountopts.xml | 29 +++++++++
.../pool-netfs-ns-mountopts.xml | 29 +++++++++
tests/storagepoolxml2xmltest.c | 6 ++
6 files changed, 146 insertions(+), 1 deletion(-)
create mode 100644 tests/storagepoolxml2xmlin/pool-netfs-ns-mountopts.xml
create mode 100644 tests/storagepoolxml2xmlout/pool-netfs-ns-mountopts.xml
diff --git a/docs/formatstorage.html.in b/docs/formatstorage.html.in
index 58f5eb2e2e..525e82552c 100644
--- a/docs/formatstorage.html.in
+++ b/docs/formatstorage.html.in
@@ -509,6 +509,65 @@
device, measured in bytes. <span class="since">Since
0.4.1</span>
</p>
+ <h3><a id="StoragePoolNamespaces">Storage Pool
Namespaces</a></h3>
+
+ <p>
+ Usage of Storage Pool Namespaces provides a mechanism to provide
+ pool type specific data in a free form or abitrary manner via
+ XML syntax targeted solely for the needs of the specific pool type
+ which is not otherwise supportable via XML. For the "netfs" pool
+ this provides a mechanism to provide additional mount options on the
+ command line not listed/supported for the <code>mount_opts</code>
+ element.
+ </p>
+ <dl>
+ <dt><code>netfs:mount_opts</code></dt>
+ <dd>Provides an XML namespace mechanism to optionally utilize
+ specifically named options for the mount command via the "-o"
+ option for the <code>netfs</code> type storage pools. That are
+ not provided by the <code>mount_opts</code> element. In order
+ to designate that the Storage Pool will be using the mechanism,
+ the <code>pool</code> element must be modified to provide the
+ XML namespace attribute syntax as follows:
+
+ <p>
+
xmlns:netfs='http://libvirt.org/schemas/storagepool/source/netfs/1.0&...
+ </p>
+
+ <p>
+ The <code>netfs:mount_opts</code> defines the mount options by
+ specifying multiple <code>netfs:option</code> subelements with
+ the attribute <code>name</code> specifying the mount option to
+ be added. The value of the named option is not checked since
+ it's possible options don't exist on all distributions. It is
+ expected that proper and valid options will be supplied for the
+ target host.
+ </p>
+
+ The following XML snippet shows the syntax required in order to
+ utilize
+ <pre>
+<pool type="netfs"
xmlns:netfs='http://libvirt.org/schemas/storagepool/source/netfs/1.0&...
+ <name>nfsimages</name>
+...
+ <source>
+...
+ </source>
+...
+ <target>
+...
+ </target>
+ <netfs:mount_opts>
+ <netfs:option name='sync'/>
+ <netfs:option name='lazytime'/>
+ </netfs:mount_opts>
+</pool>
+...</pre>
+
+ <span class="since">Since 5.1.0.</span></dd>
+
+ </dl>
+
<h2><a id="StorageVol">Storage volume XML</a></h2>
<p>
A storage volume will generally be either a file or a device
diff --git a/docs/schemas/storagepool.rng b/docs/schemas/storagepool.rng
index a32c89b94c..200bd07539 100644
--- a/docs/schemas/storagepool.rng
+++ b/docs/schemas/storagepool.rng
@@ -64,6 +64,9 @@
<ref name='sourcenetfs'/>
<ref name='target'/>
</interleave>
+ <optional>
+ <ref name='netfs_mount_opts'/>
+ </optional>
</define>
<define name='poollogical'>
@@ -702,4 +705,21 @@
</data>
</define>
+ <!--
+ Optional storage pool extensions in their own namespace:
+ NetFS
+ -->
+
+ <define name="netfs_mount_opts">
+ <element name="mount_opts"
ns="http://libvirt.org/schemas/storagepool/source/netfs/1.0">
+ <zeroOrMore>
+ <element name="option">
+ <attribute name='name'>
+ <text/>
+ </attribute>
+ </element>
+ </zeroOrMore>
+ </element>
+ </define>
+
</grammar>
diff --git a/tests/Makefile.am b/tests/Makefile.am
index f74d8463b6..ab4c716529 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -937,7 +937,9 @@ storagevolxml2xmltest_LDADD = $(LDADDS)
storagepoolxml2xmltest_SOURCES = \
storagepoolxml2xmltest.c \
testutils.c testutils.h
-storagepoolxml2xmltest_LDADD = $(LDADDS)
+storagepoolxml2xmltest_LDADD = $(LDADDS) \
+ ../src/libvirt_driver_storage_impl.la \
+ $(GNULIB_LIBS)
nodedevxml2xmltest_SOURCES = \
nodedevxml2xmltest.c \
diff --git a/tests/storagepoolxml2xmlin/pool-netfs-ns-mountopts.xml
b/tests/storagepoolxml2xmlin/pool-netfs-ns-mountopts.xml
new file mode 100644
index 0000000000..68c51da399
--- /dev/null
+++ b/tests/storagepoolxml2xmlin/pool-netfs-ns-mountopts.xml
@@ -0,0 +1,29 @@
+<pool type='netfs'
xmlns:netfs='http://libvirt.org/schemas/storagepool/source/netfs/1.0&...
+ <name>nfsimages</name>
+ <uuid>7641d5a8-af11-f730-a34e-0a7dfcede71f</uuid>
+ <capacity>0</capacity>
+ <allocation>0</allocation>
+ <available>0</available>
+ <source>
+ <host name='localhost'/>
+ <dir path='/var/lib/libvirt/images'/>
+ <format type='nfs'/>
+ <protocol ver='3'/>
+ <mount_opts>
+ <option name='nodev'/>
+ <option name='nosuid'/>
+ </mount_opts>
+ </source>
+ <target>
+ <path>/mnt</path>
+ <permissions>
+ <mode>0700</mode>
+ <owner>0</owner>
+ <group>0</group>
+ </permissions>
+ </target>
+ <netfs:mount_opts>
+ <netfs:option name='sync'/>
+ <netfs:option name='lazytime'/>
+ </netfs:mount_opts>
+</pool>
diff --git a/tests/storagepoolxml2xmlout/pool-netfs-ns-mountopts.xml
b/tests/storagepoolxml2xmlout/pool-netfs-ns-mountopts.xml
new file mode 100644
index 0000000000..82df12d646
--- /dev/null
+++ b/tests/storagepoolxml2xmlout/pool-netfs-ns-mountopts.xml
@@ -0,0 +1,29 @@
+<pool type='netfs'
xmlns:netfs='http://libvirt.org/schemas/storagepool/source/netfs/1.0&...
+ <name>nfsimages</name>
+ <uuid>7641d5a8-af11-f730-a34e-0a7dfcede71f</uuid>
+ <capacity unit='bytes'>0</capacity>
+ <allocation unit='bytes'>0</allocation>
+ <available unit='bytes'>0</available>
+ <source>
+ <host name='localhost'/>
+ <dir path='/var/lib/libvirt/images'/>
+ <format type='nfs'/>
+ <protocol ver='3'/>
+ <mount_opts>
+ <option name='nodev'/>
+ <option name='nosuid'/>
+ </mount_opts>
+ </source>
+ <target>
+ <path>/mnt</path>
+ <permissions>
+ <mode>0700</mode>
+ <owner>0</owner>
+ <group>0</group>
+ </permissions>
+ </target>
+ <netfs:mount_opts>
+ <netfs:option name='sync'/>
+ <netfs:option name='lazytime'/>
+ </netfs:mount_opts>
+</pool>
diff --git a/tests/storagepoolxml2xmltest.c b/tests/storagepoolxml2xmltest.c
index ecdc2715b0..6b6653dcfe 100644
--- a/tests/storagepoolxml2xmltest.c
+++ b/tests/storagepoolxml2xmltest.c
@@ -11,6 +11,8 @@
#include "testutilsqemu.h"
#include "virstring.h"
+#include "storage/storage_util.h"
+
#define VIR_FROM_THIS VIR_FROM_NONE
static int
@@ -70,6 +72,9 @@ mymain(void)
testCompareXMLToXMLHelper, (name)) < 0) \
ret = -1
+ if (storageRegisterAll() < 0)
+ return EXIT_FAILURE;
+
DO_TEST("pool-dir");
DO_TEST("pool-dir-naming");
DO_TEST("pool-fs");
@@ -87,6 +92,7 @@ mymain(void)
DO_TEST("pool-netfs-gluster");
DO_TEST("pool-netfs-cifs");
DO_TEST("pool-netfs-mountopts");
+ DO_TEST("pool-netfs-ns-mountopts");
DO_TEST("pool-scsi");
DO_TEST("pool-scsi-type-scsi-host");
DO_TEST("pool-scsi-type-fc-host");
--
2.20.1