[virt-tools-list] [libvirt] question about syntax of storage volume <target> element

Jim Fehlig jfehlig at suse.com
Tue Oct 2 17:09:17 UTC 2018


On 10/2/18 9:27 AM, Cole Robinson wrote:
> On 10/02/2018 10:53 AM, Jim Fehlig wrote:
>> On 10/2/18 5:13 AM, Pavel Hrdina wrote:
>>> On Mon, Oct 01, 2018 at 02:28:09PM -0400, Cole Robinson wrote:
>>>> On 09/28/2018 12:54 AM, Jim Fehlig wrote:
>>>>> I've attempted to use virt-manager to create a new VM that uses a volume
>>>>> from an rbd-based network pool, but have not been able to progress past
>>>>> step 4/5 where VM storage is selected. It appears virt-manager has
>>>>> problems properly detecting the volume as network-based storage, but
>>>>> before investigating those further I have a question about the syntax of
>>>>> the <target> element of a storage volume.
>>>>
>>>> Yeah virt-manager is known to be lacking WRT rbd. I did some work a few
>>>> years back but didn't finish it. At least it doesn't know how to correctly
>>>> use a volume with any auth data in the XML. I need to get another rbd setup
>>>> to test with and fix it all
>>>
>>> I was investigating the RBD support as well and in order to add proper
>>> support for it into virt-manager we need to add support for secrets.
>>
>> Right. But I was starting with the assumption that a "storage admin" setup an 
>> rbd-based pool, necessary secrets, etc. Then user creating a new VM could 
>> select existing volumes in the pool or create new ones at step 4/5 of the VM 
>> creation wizard. Currently a user can select an existing volume or create a 
>> new one, but can't progress beyond that point. I have a hack (attached, based 
>> against 1.5.1) to workaround the problem in virt-manager. Commit 582c1d3d 
>> fixed virt-install to copy auth data from the pool to the device config in 
>> domXML and as a first step I'm trying to do the same with virt-manager.
>>
> 
> dropping libvir-list and adding virt-tools-list
> 
> Cool, thanks for working on this. Can you provide:
> 
> - pool XML you are using

<pool type="rbd">
   <name>rbdpool</name>
   <source>
     <name>libvirt-pool</name>
     <host name='foo.bar.com' port='6789'/>
     <auth username='libvirt' type='ceph'>
       <secret uuid='c451d49d-a48b-43d8-bd78-97ccebd7d67a'/>
     </auth>
   </source>
</pool>

> - vol XML

<volume type='network'>
   <name>test-image</name>
   <key>libvirt-pool/test-image</key>
   <source>
   </source>
   <capacity unit='bytes'>21474836480</capacity>
   <allocation unit='bytes'>5481955328</allocation>
   <target>
     <path>libvirt-pool/test-image</path>
     <format type='raw'/>
   </target>
</volume>

> - the backtrace you are hitting

The first hunk in diskbackend.py of my hack fixes this backtrace (including a 
bit of preceding context)

[Tue, 02 Oct 2018 10:53:41 virt-manager 20533] DEBUG (storagebrowse:53) Showing 
storage browser
[Tue, 02 Oct 2018 10:53:57 virt-manager 20533] DEBUG (storagebrowse:138) Chosen 
volume XML:
<volume type="network">
   <name>test-image</name>
   <key>libvirt-pool/test-image</key>
   <source>
   </source>
   <capacity unit="bytes">21474836480</capacity>
   <allocation unit="bytes">5481955328</allocation>
   <target>
     <path>libvirt-pool/test-image</path>
     <format type="raw"/>
   </target>
</volume>
[Tue, 02 Oct 2018 10:53:57 virt-manager 20533] DEBUG (storagebrowse:66) Closing 
storage browser
[Tue, 02 Oct 2018 10:54:04 virt-manager 20533] DEBUG (diskbackend:170) 
Attempting to build pool=libvirt-pool 
target=/usr/share/virt-manager/virtinst/libvirt-pool
[Tue, 02 Oct 2018 10:54:04 virt-manager 20533] DEBUG (storage:524) Creating 
storage pool 'libvirt-pool' with xml:
<pool type="dir">
   <name>libvirt-pool</name>
   <target>
     <path>/usr/share/virt-manager/virtinst/libvirt-pool</path>
   </target>
</pool>
[Tue, 02 Oct 2018 10:54:04 virt-manager 20533] ERROR (error:143) Validation 
Error: Storage parameter error. Could not start storage pool: cannot open 
directory '/usr/share/virt-manager/virtinst/libvirt-pool': No such file or directory
Traceback (most recent call last):
   File "/usr/share/virt-manager/virtManager/create.py", line 2305, in 
_validate_storage_page
     path=path)
   File "/usr/share/virt-manager/virtManager/addstorage.py", line 262, in 
validate_storage
     disk.path = path or None
   File "/usr/share/virt-manager/virtinst/devicedisk.py", line 519, in _set_path
     (vol_object, parent_pool) = diskbackend.manage_path(self.conn, newpath)
   File "/usr/share/virt-manager/virtinst/diskbackend.py", line 176, in manage_path
     pool = poolxml.install(build=False, create=True, autostart=True)
   File "/usr/share/virt-manager/virtinst/storage.py", line 559, in install
     raise RuntimeError(errmsg)
RuntimeError: Could not start storage pool: cannot open directory 
'/usr/share/virt-manager/virtinst/libvirt-pool': No such file or directory

After fixing the above I see errors trying to change the permissions on the volume

[Tue, 02 Oct 2018 10:58:35 virt-manager 20822] DEBUG (addstorage:143) No search 
access for dirs: ['libvirt-pool', '']
[Tue, 02 Oct 2018 10:59:46 virt-manager 20822] DEBUG (addstorage:156) Attempting 
to correct permission issues.
[Tue, 02 Oct 2018 10:59:46 virt-manager 20822] DEBUG (devicedisk:290) Ran 
command '['setfacl', '--modify', 'user:qemu:x', '']'
[Tue, 02 Oct 2018 10:59:46 virt-manager 20822] DEBUG (devicedisk:292) out=b''
err=b'setfacl: : No such file or directory\n'
[Tue, 02 Oct 2018 10:59:46 virt-manager 20822] DEBUG (devicedisk:325) setfacl 
failed, trying old fashioned way
[Tue, 02 Oct 2018 10:59:46 virt-manager 20822] DEBUG (devicedisk:297) Setting +x on
[Tue, 02 Oct 2018 10:59:46 virt-manager 20822] DEBUG (devicedisk:297) Setting +x 
on libvirt-pool
[Tue, 02 Oct 2018 10:59:46 virt-manager 20822] DEBUG (addstorage:171) Permission 
errors:
  : [Errno 2] No such file or directory: ''
libvirt-pool : [Errno 2] No such file or directory: 'libvirt-pool'
It is very likely the VM will fail to start up.

The hunk in devicedisk.py fixes this by skipping the permissions check for 
network-based volumes.

> Maybe I can distill that stuff into something that's easy to reproduce with the 
> testdriver

Cool, thanks!

Regards,
Jim




More information about the virt-tools-list mailing list