[PATCH] Fix guest disk return when disk is a iscsi volume

When a guest has an ISCSI volume attached as disk, backend is not returning path correctly, it return a blank field. This patch fixes this problem, returning the path = <iscsi pool> - <volume unit>. Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- src/kimchi/vmdisks.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/kimchi/vmdisks.py b/src/kimchi/vmdisks.py index 6012ada..6835172 100644 --- a/src/kimchi/vmdisks.py +++ b/src/kimchi/vmdisks.py @@ -53,6 +53,9 @@ def get_vm_disk(dom, dev_name): path = (source.attrib['protocol'] + '://' + host.attrib['name'] + ':' + host.attrib['port'] + source.attrib['name']) + # ISCSI, Fibre Channel + elif src_type == 'volume': + path = source.attrib['pool'] + ' - ' + source.attrib['volume'] else: path = source.attrib[DEV_TYPE_SRC_ATTR_MAP[src_type]] # Retrieve storage bus type -- 1.9.3

On 2014年08月26日 12:51, Rodrigo Trujillo wrote:
When a guest has an ISCSI volume attached as disk, backend is not returning path correctly, it return a blank field. This patch fixes this problem, returning the path = <iscsi pool> - <volume unit>.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- src/kimchi/vmdisks.py | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/src/kimchi/vmdisks.py b/src/kimchi/vmdisks.py index 6012ada..6835172 100644 --- a/src/kimchi/vmdisks.py +++ b/src/kimchi/vmdisks.py @@ -53,6 +53,9 @@ def get_vm_disk(dom, dev_name): path = (source.attrib['protocol'] + '://' + host.attrib['name'] + ':' + host.attrib['port'] + source.attrib['name']) + # ISCSI, Fibre Channel + elif src_type == 'volume': + path = source.attrib['pool'] + ' - ' + source.attrib['volume'] else: path = source.attrib[DEV_TYPE_SRC_ATTR_MAP[src_type]] # Retrieve storage bus type If a disk is attached from path : POST /vms/vm-name/storages, we just support 3 types of src_type: block, file, and network (as you can see in vmstorages.py _check_path())
So do you mean if you attached a disk at create time of vm? If I attach iscsi volume to vm as 'block' src_type in runtime and the attached disk in vm xml will be like: <disk type='block' device='disk'> <driver name='qemu' type='raw'/> <source dev='/dev/disk/by-id/scsi-14945540000000000a9317b0c790140de31c9bfc43cd66411'/> <target dev='vdb' bus='virtio'/> <alias name='virtio-disk1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </disk> So the path of iscsi volume is: <source dev='/dev/disk/by-id/scsi-14945540000000000a9317b0c790140de31c9bfc43cd66411'/> which you can read from the volume xml. virsh # vol-list --pool iscsi-1 Name Path ----------------------------------------- unit:0:0:0 /dev/disk/by-id/scsi-14945540000000000a9317b0c790140de31c9bfc43cd66411 I think you can report path using this value.

On 08/26/2014 05:38 AM, Royce Lv wrote:
On 2014年08月26日 12:51, Rodrigo Trujillo wrote:
When a guest has an ISCSI volume attached as disk, backend is not returning path correctly, it return a blank field. This patch fixes this problem, returning the path = <iscsi pool> - <volume unit>.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- src/kimchi/vmdisks.py | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/src/kimchi/vmdisks.py b/src/kimchi/vmdisks.py index 6012ada..6835172 100644 --- a/src/kimchi/vmdisks.py +++ b/src/kimchi/vmdisks.py @@ -53,6 +53,9 @@ def get_vm_disk(dom, dev_name): path = (source.attrib['protocol'] + '://' + host.attrib['name'] + ':' + host.attrib['port'] + source.attrib['name']) + # ISCSI, Fibre Channel + elif src_type == 'volume': + path = source.attrib['pool'] + ' - ' + source.attrib['volume'] else: path = source.attrib[DEV_TYPE_SRC_ATTR_MAP[src_type]] # Retrieve storage bus type If a disk is attached from path : POST /vms/vm-name/storages, we just support 3 types of src_type: block, file, and network (as you can see in vmstorages.py _check_path())
Yes, I have seem this yesterday. Then I open an issue to kimchi: - Kimchi fails when tries to attach new iSCSI volume in edit guest window #408 - https://github.com/kimchi-project/kimchi/issues/408 However, I am proposing to fix another problem: The storage return information. See below
So do you mean if you attached a disk at create time of vm?
If I attach iscsi volume to vm as 'block' src_type in runtime and the attached disk in vm xml will be like: <disk type='block' device='disk'> <driver name='qemu' type='raw'/> <source dev='/dev/disk/by-id/scsi-14945540000000000a9317b0c790140de31c9bfc43cd66411'/> <target dev='vdb' bus='virtio'/> <alias name='virtio-disk1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </disk>
The problem here is really specific, with iSCSI volumes. When you create a template and assign a iSCSI volume in it, the guest generated based on the template will have a disk like: <disk type='volume' device='disk'> <driver name='qemu' type='raw'/> <source pool='TEST-ISCSI1' volume='unit:0:0:1' mode='host'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </disk> Type "volume" is not been handled, so path is returned empty. I am fixing this problem specifically.
So the path of iscsi volume is: <source dev='/dev/disk/by-id/scsi-14945540000000000a9317b0c790140de31c9bfc43cd66411'/>
which you can read from the volume xml. virsh # vol-list --pool iscsi-1 Name Path ----------------------------------------- unit:0:0:0 /dev/disk/by-id/scsi-14945540000000000a9317b0c790140de31c9bfc43cd66411
I think you can report path using this value.

On 08/26/2014 05:38 AM, Royce Lv wrote:
On 2014年08月26日 12:51, Rodrigo Trujillo wrote:
When a guest has an ISCSI volume attached as disk, backend is not returning path correctly, it return a blank field. This patch fixes this problem, returning the path = <iscsi pool> - <volume unit>.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- src/kimchi/vmdisks.py | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/src/kimchi/vmdisks.py b/src/kimchi/vmdisks.py index 6012ada..6835172 100644 --- a/src/kimchi/vmdisks.py +++ b/src/kimchi/vmdisks.py @@ -53,6 +53,9 @@ def get_vm_disk(dom, dev_name): path = (source.attrib['protocol'] + '://' + host.attrib['name'] + ':' + host.attrib['port'] + source.attrib['name']) + # ISCSI, Fibre Channel + elif src_type == 'volume': + path = source.attrib['pool'] + ' - ' + source.attrib['volume'] else: path = source.attrib[DEV_TYPE_SRC_ATTR_MAP[src_type]] # Retrieve storage bus type If a disk is attached from path : POST /vms/vm-name/storages, we just support 3 types of src_type: block, file, and network (as you can see in vmstorages.py _check_path())
Yes, I have seem this yesterday. Then I open an issue to kimchi: - Kimchi fails when tries to attach new iSCSI volume in edit guest window #408 - https://github.com/kimchi-project/kimchi/issues/408
However, I am proposing to fix another problem: The storage return information. See below
So do you mean if you attached a disk at create time of vm?
If I attach iscsi volume to vm as 'block' src_type in runtime and the attached disk in vm xml will be like: <disk type='block' device='disk'> <driver name='qemu' type='raw'/> <source dev='/dev/disk/by-id/scsi-14945540000000000a9317b0c790140de31c9bfc43cd66411'/> <target dev='vdb' bus='virtio'/> <alias name='virtio-disk1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> </disk>
The problem here is really specific, with iSCSI volumes. When you create a template and assign a iSCSI volume in it, the guest generated based on the template will have a disk like:
<disk type='volume' device='disk'> <driver name='qemu' type='raw'/> <source pool='TEST-ISCSI1' volume='unit:0:0:1' mode='host'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </disk>
Type "volume" is not been handled, so path is returned empty. I am fixing this problem specifically. If an iscsi target is discovered, and pool and volume can be listed
On 2014年08月27日 02:35, Rodrigo Trujillo wrote: through libvirt(even we don't use it), there is a system path under "/dev". I'm not sure why volume path is empty and we need to fake one ?
So the path of iscsi volume is: <source dev='/dev/disk/by-id/scsi-14945540000000000a9317b0c790140de31c9bfc43cd66411'/>
which you can read from the volume xml. virsh # vol-list --pool iscsi-1 Name Path ----------------------------------------- unit:0:0:0 /dev/disk/by-id/scsi-14945540000000000a9317b0c790140de31c9bfc43cd66411
I think you can report path using this value.

We have more problems in the backend when attaching a iSCSI Lun (different xmls, see my previous email in Royce's patch). I am going to be out on vacation for next 2 weeks, then Aline is going to take care of this problem and patch. Thnaks Aline On 08/26/2014 01:51 AM, Rodrigo Trujillo wrote:
When a guest has an ISCSI volume attached as disk, backend is not returning path correctly, it return a blank field. This patch fixes this problem, returning the path = <iscsi pool> - <volume unit>.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- src/kimchi/vmdisks.py | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/src/kimchi/vmdisks.py b/src/kimchi/vmdisks.py index 6012ada..6835172 100644 --- a/src/kimchi/vmdisks.py +++ b/src/kimchi/vmdisks.py @@ -53,6 +53,9 @@ def get_vm_disk(dom, dev_name): path = (source.attrib['protocol'] + '://' + host.attrib['name'] + ':' + host.attrib['port'] + source.attrib['name']) + # ISCSI, Fibre Channel + elif src_type == 'volume': + path = source.attrib['pool'] + ' - ' + source.attrib['volume'] else: path = source.attrib[DEV_TYPE_SRC_ATTR_MAP[src_type]] # Retrieve storage bus type
participants (2)
-
Rodrigo Trujillo
-
Royce Lv