From: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
CDROM can be shared by multiple vms, so we shall not check its ref_cnt.
We limit ref_cnt checking just to disk attachment.
Signed-off-by: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
---
src/kimchi/model/vmstorages.py | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/kimchi/model/vmstorages.py b/src/kimchi/model/vmstorages.py
index 4d90265..8a35a79 100644
--- a/src/kimchi/model/vmstorages.py
+++ b/src/kimchi/model/vmstorages.py
@@ -160,10 +160,11 @@ class VMStoragesModel(object):
raise InvalidParameter("KCHVMSTOR0012E")
except Exception as e:
raise InvalidParameter("KCHVMSTOR0015E", {'error': e})
- if vol_info['ref_cnt'] != 0:
+ if vol_info['ref_cnt'] != 0 and params['type'] ==
'disk':
raise InvalidParameter("KCHVMSTOR0016E")
params['format'] = vol_info['format']
params['path'] = vol_info['path']
+
params['src_type'] = _check_path(params['path'])
params.setdefault(
'bus', _get_device_bus(params['type'], dom))
@@ -178,12 +179,15 @@ class VMStoragesModel(object):
conn = self.conn.get()
dom = conn.lookupByName(vm_name)
dom.attachDeviceFlags(dev_xml, libvirt.VIR_DOMAIN_AFFECT_CURRENT)
+
+ except Exception as e:
+ raise OperationFailed("KCHVMSTOR0008E", {'error':
e.message})
+
+ if params.get('vol'):
with self.objstore as session:
session.store('storagevolume', vol_id,
{'ref_cnt': vol_info['ref_cnt'] + 1})
- except Exception as e:
- raise OperationFailed("KCHVMSTOR0008E", {'error':
e.message})
return params['dev']
def _get_storage_device_name(self, vm_name):
--
1.8.3.2