While trying to compare netfs against my new gluster pool, I
discovered two things:
virt-xml-validate chokes on valid xml produced by 'virsh pool-dumpxml'
[yet another reason that ALL patches that add new xml should be adding
corresponding tests]
When using glusterfs FUSE mounts, you cannot access a subdirectory
of a gluster volume. The recommended workaround in the gluster
community is to mount the volume to an intermediate location, then
bind-mount the desired subdirectory to the final location. Maybe
we should teach libvirt to do bind-mounting, but for now I chose to
just document the limitation.
* docs/storage.html.in: Improve documentation.
* docs/schemas/storagepool.rng (sourcefmtnetfs): Allow all
formats, and drop redundant info-vendor.
* tests/storagepoolxml2xmltest.c (mymain): New test.
* tests/storagepoolxml2xmlin/pool-netfs-gluster.xml: New file.
* tests/storagepoolxml2xmlout/pool-netfs-gluster.xml: Likewise.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
We added glusterfs support to netfs pools in 2009 (commit 2562303);
it's been broken for quite some time :(
docs/schemas/storagepool.rng | 5 ++---
docs/storage.html.in | 11 ++++++++---
tests/storagepoolxml2xmlin/pool-netfs-gluster.xml | 12 ++++++++++++
tests/storagepoolxml2xmlout/pool-netfs-gluster.xml | 20 ++++++++++++++++++++
tests/storagepoolxml2xmltest.c | 1 +
5 files changed, 43 insertions(+), 6 deletions(-)
create mode 100644 tests/storagepoolxml2xmlin/pool-netfs-gluster.xml
create mode 100644 tests/storagepoolxml2xmlout/pool-netfs-gluster.xml
diff --git a/docs/schemas/storagepool.rng b/docs/schemas/storagepool.rng
index 66d3c22..61fa7a3 100644
--- a/docs/schemas/storagepool.rng
+++ b/docs/schemas/storagepool.rng
@@ -381,11 +381,10 @@
<choice>
<value>auto</value>
<value>nfs</value>
+ <value>cifs</value>
+ <value>glusterfs</value>
</choice>
</attribute>
- <optional>
- <ref name='sourceinfovendor'/>
- </optional>
</element>
</optional>
</define>
diff --git a/docs/storage.html.in b/docs/storage.html.in
index 1181444..0464565 100644
--- a/docs/storage.html.in
+++ b/docs/storage.html.in
@@ -249,7 +249,8 @@
a local block device as the source, it requires the name of a
host and path of an exported directory. It will mount this network
filesystem and manage files within the directory of its mount
- point. It will default to using NFS as the protocol.
+ point. It will default to using <code>auto</code> as the
+ protocol, which generally tries a mount via NFS first.
</p>
<h3>Example pool input</h3>
@@ -259,6 +260,7 @@
<source>
<host name="nfs.example.com"/>
<dir path="/var/lib/virt/images"/>
+ <format type='nfs'/>
</source>
<target>
<path>/var/lib/virt/images</path>
@@ -275,10 +277,13 @@
<code>nfs</code>
</li>
<li>
- <code>glusterfs</code>
+ <code>glusterfs</code> - use the glusterfs FUSE file system.
+ For now, the <code>dir</code> specified as the source can only
+ be a gluster volume name, as gluster does not provide a way to
+ directly mount subdirectories within a volume.
</li>
<li>
- <code>cifs</code>
+ <code>cifs</code> - use the SMB (samba) or CIFS file system
</li>
</ul>
diff --git a/tests/storagepoolxml2xmlin/pool-netfs-gluster.xml
b/tests/storagepoolxml2xmlin/pool-netfs-gluster.xml
new file mode 100644
index 0000000..9b39e87
--- /dev/null
+++ b/tests/storagepoolxml2xmlin/pool-netfs-gluster.xml
@@ -0,0 +1,12 @@
+<pool type='netfs'>
+ <source>
+ <host name='example.com'/>
+ <format type='glusterfs'/>
+ <dir path='/volume'/>
+ </source>
+ <name>netfs-gluster</name>
+ <uuid>d5609ced-94b1-489e-b218-eff35c30336a</uuid>
+ <target>
+ <path>/mnt/gluster</path>
+ </target>
+</pool>
diff --git a/tests/storagepoolxml2xmlout/pool-netfs-gluster.xml
b/tests/storagepoolxml2xmlout/pool-netfs-gluster.xml
new file mode 100644
index 0000000..bab2a15
--- /dev/null
+++ b/tests/storagepoolxml2xmlout/pool-netfs-gluster.xml
@@ -0,0 +1,20 @@
+<pool type='netfs'>
+ <name>netfs-gluster</name>
+ <uuid>d5609ced-94b1-489e-b218-eff35c30336a</uuid>
+ <capacity unit='bytes'>0</capacity>
+ <allocation unit='bytes'>0</allocation>
+ <available unit='bytes'>0</available>
+ <source>
+ <host name='example.com'/>
+ <dir path='/volume'/>
+ <format type='glusterfs'/>
+ </source>
+ <target>
+ <path>/mnt/gluster</path>
+ <permissions>
+ <mode>0755</mode>
+ <owner>-1</owner>
+ <group>-1</group>
+ </permissions>
+ </target>
+</pool>
diff --git a/tests/storagepoolxml2xmltest.c b/tests/storagepoolxml2xmltest.c
index 0ae9b29..743e1cb 100644
--- a/tests/storagepoolxml2xmltest.c
+++ b/tests/storagepoolxml2xmltest.c
@@ -93,6 +93,7 @@ mymain(void)
DO_TEST("pool-iscsi");
DO_TEST("pool-iscsi-auth");
DO_TEST("pool-netfs");
+ DO_TEST("pool-netfs-gluster");
DO_TEST("pool-scsi");
DO_TEST("pool-scsi-type-scsi-host");
DO_TEST("pool-scsi-type-fc-host");
--
1.8.3.1