I have scoured the web and can't find anything on the topic: Is IPv6 supported for remote image targets? For example: guestfish --format=raw --ro -a rbd://[fd00::cefc:1]:6789/images/CentOS-7-x86_64-GenericCloud-1901 Does not work citing the following: libguestfs: trace: set_verbose true libguestfs: trace: set_verbose = 0 libguestfs: create: flags = 0, handle = 0x5560231bdfb0, program = guestfish libguestfs: trace: set_pgroup true libguestfs: trace: set_pgroup = 0 libguestfs: trace: add_drive "images/CentOS-7-x86_64-GenericCloud-1901" "readonly:true" "format:raw" "protocol:rbd" "server:tcp:[fd00::cefc:1]:6789" libguestfs: creating COW overlay to protect original drive content libguestfs: trace: get_tmpdir libguestfs: trace: get_tmpdir = "/tmp" libguestfs: trace: disk_create "/tmp/libguestfs3pGMi6/overlay1.qcow2" "qcow2" -1 "backingfile:rbd:images/CentOS-7-x86_64-GenericCloud-1901:mon_host=[fd00::cefc:1]\:6789:auth_supported=none" "backingformat:raw" libguestfs: command: run: qemu-img libguestfs: command: run: \ create libguestfs: command: run: \ -f qcow2 libguestfs: command: run: \ -o backing_file=rbd:images/CentOS-7-x86_64-GenericCloud-1901:mon_host=[fd00::cefc:1]\:6789:auth_supported=none,backing_fmt=raw libguestfs: command: run: \ /tmp/libguestfs3pGMi6/overlay1.qcow2 qemu-img: /tmp/libguestfs3pGMi6/overlay1.qcow2: invalid conf option :cefc:1]:6789:auth_supported: No such file or directory Could not open backing image to determine size. libguestfs: error: qemu-img: /tmp/libguestfs3pGMi6/overlay1.qcow2: qemu-img exited with error status 1, see debug messages above libguestfs: trace: disk_create = -1 (error) libguestfs: trace: add_drive = -1 (error) libguestfs: trace: close libguestfs: closing guestfs handle 0x5560231bdfb0 (state 0) libguestfs: command: run: rm libguestfs: command: run: \ -rf /tmp/libguestfs3pGMi6 Other variations of the IPv6 address fail in a similar fashion, some even failing with the URI parser. It seems as though everything after the first : in the address is getting parsed as args. Changing this IPv6 address over to a hostname allows the command to work. Unfortunately I'm working within the confines of OpenStack and some of it's requests here and my Ceph cluster is v6-only so I can't easily just have it use hostnames to solve the issue. -- Jonathan Wright KnownHost, LLC https://www.knownhost.com
Richard W.M. Jones
2019-Mar-30 07:50 UTC
Re: [Libguestfs] guestfish Remote Images IPv6 Support
On Fri, Mar 29, 2019 at 06:17:17PM -0500, Jonathan Wright wrote:> I have scoured the web and can't find anything on the topic: Is IPv6 > supported for remote image targets?It definitely should work, although I don't know if anyone has tried using the address explicitly (rather than a hostname which resolves to an AAAA record).> For example: > > guestfish --format=raw --ro -a > rbd://[fd00::cefc:1]:6789/images/CentOS-7-x86_64-GenericCloud-1901 > > Does not work citing the following:The important lines are these. Firstly guestfish parses the URL into an actual libguestfs API call, which looks fine to me:> libguestfs: trace: add_drive > "images/CentOS-7-x86_64-GenericCloud-1901" "readonly:true" > "format:raw" "protocol:rbd" "server:tcp:[fd00::cefc:1]:6789"This is probably where it goes wrong:> "/tmp/libguestfs3pGMi6/overlay1.qcow2" "qcow2" -1 "backingfile:rbd:images/CentOS-7-x86_64-GenericCloud-1901:mon_host=[fd00::cefc:1]\:6789:auth_supported=none" > "backingformat:raw"> libguestfs: command: run: \ -o backing_file=rbd:images/CentOS-7-x86_64-GenericCloud-1901:mon_host=[fd00::cefc:1]\:6789:auth_supported=none,backing_fmt=raw > libguestfs: command: run: \ /tmp/libguestfs3pGMi6/overlay1.qcow2 > qemu-img: /tmp/libguestfs3pGMi6/overlay1.qcow2: invalid conf option > :cefc:1]:6789:auth_supported: No such file or directory > Could not open backing image to determine size.The code in libguestfs is supposed to turn the guestfs_add_drive ‘servers’ parameter into a Ceph URL for qemu: https://github.com/libguestfs/libguestfs/blob/f79129b8dc92470e3a5597daf53c84038bd6859e/lib/qemu.c#L905 and I suppose this is being done wrong somehow (I don't have a Ceph server to test). At a guess I would say that it seems as if ':' characters must be quoted somehow (backslash?) because they are also used to separate the address and port number. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-builder quickly builds VMs from scratch http://libguestfs.org/virt-builder.1.html
Jonathan Wright
2019-Apr-01 13:45 UTC
Re: [Libguestfs] guestfish Remote Images IPv6 Support
Unfortunately I do need to use the address explicitly as opposed to hostnames because the source of the data fed here is Ceph's monmap which returns the addresses explicitly. I've tried all the common ways to escape the : in the v6 address to no avail. I definitely agree that the problem looks to be it parsing the colons as if the port comes next and then everything after that is args. Should I file a bug report? There doesn't seem to be any way to prevent the : from getting parsed incorrectly. On 3/30/19 2:50 AM, Richard W.M. Jones wrote:> On Fri, Mar 29, 2019 at 06:17:17PM -0500, Jonathan Wright wrote: >> I have scoured the web and can't find anything on the topic: Is IPv6 >> supported for remote image targets? > It definitely should work, although I don't know if anyone has tried > using the address explicitly (rather than a hostname which resolves to > an AAAA record). > >> For example: >> >> guestfish --format=raw --ro -a >> rbd://[fd00::cefc:1]:6789/images/CentOS-7-x86_64-GenericCloud-1901 >> >> Does not work citing the following: > The important lines are these. Firstly guestfish parses the URL into > an actual libguestfs API call, which looks fine to me: > >> libguestfs: trace: add_drive >> "images/CentOS-7-x86_64-GenericCloud-1901" "readonly:true" >> "format:raw" "protocol:rbd" "server:tcp:[fd00::cefc:1]:6789" > This is probably where it goes wrong: > >> "/tmp/libguestfs3pGMi6/overlay1.qcow2" "qcow2" -1 "backingfile:rbd:images/CentOS-7-x86_64-GenericCloud-1901:mon_host=[fd00::cefc:1]\:6789:auth_supported=none" >> "backingformat:raw" >> libguestfs: command: run: \ -o backing_file=rbd:images/CentOS-7-x86_64-GenericCloud-1901:mon_host=[fd00::cefc:1]\:6789:auth_supported=none,backing_fmt=raw >> libguestfs: command: run: \ /tmp/libguestfs3pGMi6/overlay1.qcow2 >> qemu-img: /tmp/libguestfs3pGMi6/overlay1.qcow2: invalid conf option >> :cefc:1]:6789:auth_supported: No such file or directory >> Could not open backing image to determine size. > The code in libguestfs is supposed to turn the guestfs_add_drive > ‘servers’ parameter into a Ceph URL for qemu: > > https://github.com/libguestfs/libguestfs/blob/f79129b8dc92470e3a5597daf53c84038bd6859e/lib/qemu.c#L905 > > and I suppose this is being done wrong somehow (I don't have a Ceph > server to test). > > At a guess I would say that it seems as if ':' characters must be > quoted somehow (backslash?) because they are also used to separate the > address and port number. > > Rich. >-- Jonathan Wright KnownHost, LLC https://www.knownhost.com