[Pkg-libvirt-commits] [libguestfs] 110/233: fish: Handle Ceph/rbd URIs and convert them to paths properly (RHBZ#1026688).

Hilko Bengen bengen at moszumanska.debian.org
Wed Feb 19 21:11:25 UTC 2014


This is an automated email from the git hooks/post-receive script.

bengen pushed a commit to branch experimental
in repository libguestfs.

commit 992a6b297023711862229aabe4e23b6a1c94c1cc
Author: Richard W.M. Jones <rjones at redhat.com>
Date:   Thu Jan 23 08:30:12 2014 +0000

    fish: Handle Ceph/rbd URIs and convert them to paths properly (RHBZ#1026688).
    
    The path at the API level (for guestfs_add_drive_opts) is:
    
      pool/disk
    
    The URI syntax is either rbd:///pool/disk or rbd://server:port/pool/disk.
    Because of the way URI parsing works we may need to remove a leading
    '/' character before passing the path down to the API.
---
 fish/guestfish.pod   |  6 ++++--
 fish/test-add-uri.sh |  6 ++++--
 fish/uri.c           | 16 +++++++++++++---
 3 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/fish/guestfish.pod b/fish/guestfish.pod
index 04d9aa9..0d81ba8 100644
--- a/fish/guestfish.pod
+++ b/fish/guestfish.pod
@@ -1198,7 +1198,9 @@ The equivalent API command would be (no export name):
 
  ><fs> add "" protocol:nbd server:[tcp:example.com|unix:/socket]
 
-=head2 B<-a rbd://example.com[:port]/disk>
+=head2 B<-a rbd:///pool/disk>
+
+=head2 B<-a rbd://example.com[:port]/pool/disk>
 
 Add a disk image located on a Ceph (RBD/librbd) storage volume.
 
@@ -1207,7 +1209,7 @@ server can be specified when using this URI syntax.
 
 The equivalent API command would be:
 
- ><fs> add /disk protocol:rbd server:tcp:example.com
+ ><fs> add pool/disk protocol:rbd server:tcp:example.com:port
 
 =head2 B<-a sheepdog://[example.com[:port]]/volume/image>
 
diff --git a/fish/test-add-uri.sh b/fish/test-add-uri.sh
index dfeccf7..bc06a24 100755
--- a/fish/test-add-uri.sh
+++ b/fish/test-add-uri.sh
@@ -59,8 +59,10 @@ $VG ./guestfish -x -a 'nbd:///export?socket=/sk' </dev/null >test-add-uri.out 2>
 grep -sq 'add_drive "/export" "protocol:nbd" "server:unix:/sk"' test-add-uri.out || fail
 
 # rbd
-$VG ./guestfish -x -a rbd://example.com:3000/disk </dev/null >test-add-uri.out 2>&1
-grep -sq 'add_drive "/disk" "protocol:rbd" "server:tcp:example.com:3000"' test-add-uri.out || fail
+$VG ./guestfish -x -a rbd://example.com:6789/pool/disk </dev/null >test-add-uri.out 2>&1
+grep -sq 'add_drive "pool/disk" "protocol:rbd" "server:tcp:example.com:6789"' test-add-uri.out || fail
+$VG ./guestfish -x -a rbd:///pool/disk </dev/null >test-add-uri.out 2>&1
+grep -sq 'add_drive "pool/disk" "protocol:rbd"' test-add-uri.out || fail
 
 # sheepdog
 $VG ./guestfish -x -a sheepdog:///volume/image </dev/null >test-add-uri.out 2>&1
diff --git a/fish/uri.c b/fish/uri.c
index 876d731..0d530aa 100644
--- a/fish/uri.c
+++ b/fish/uri.c
@@ -105,6 +105,7 @@ parse (const char *arg, char **path_ret, char **protocol_ret,
 {
   CLEANUP_XMLFREEURI xmlURIPtr uri = NULL;
   CLEANUP_FREE char *socket = NULL;
+  char *path;
 
   uri = xmlParseURI (arg);
   if (!uri) {
@@ -162,9 +163,18 @@ parse (const char *arg, char **path_ret, char **protocol_ret,
   }
   else *username_ret = NULL;
 
-  *path_ret = strdup (uri->path ? uri->path : "");
-  if (!*path_ret) {
-    perror ("path");
+  /* We may have to adjust the path depending on the protocol.  For
+   * example ceph/rbd URIs look like rbd:///pool/disk, but the
+   * exportname expected will be "pool/disk".  Here, uri->path will be
+   * "/pool/disk" so we have to knock off the leading '/' character.
+   */
+  path = uri->path;
+  if (STREQ (uri->scheme, "rbd") && path[0] == '/')
+    path++;
+
+  *path_ret = strdup (path ? path : "");
+  if (*path_ret == NULL) {
+    perror ("strdup: path");
     free (*protocol_ret);
     guestfs___free_string_list (*server_ret);
     free (*username_ret);

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-libvirt/libguestfs.git



More information about the Pkg-libvirt-commits mailing list