vscsi_be = vscsi_dict.get('backend', None)
# destroy existing XenAPI DSCSI objects
+ vscsi_devid = int(dev_info['devs'][0]['devid'])
for dscsi_uuid in XendDSCSI.get_by_VM(self['uuid']):
- XendAPIStore.deregister(dscsi_uuid, "DSCSI")
+ dscsi_inst = XendAPIStore.get(dscsi_uuid, 'DSCSI')
+ if vscsi_devid == dscsi_inst.get_virtual_host():
+ XendAPIStore.deregister(dscsi_uuid, "DSCSI")
# create XenAPI DSCSI objects.
for vscsi_dev in vscsi_devs:
['v-dev', xenapi_dscsi.get('virtual_HCTL')],
['state', xenbusState['Initialising']],
['uuid', dscsi_uuid]
- ]
+ ],
+ ['feature-host', 0]
]
if self._stateGet() != XEN_API_VM_POWER_STATE_RUNNING:
raise XendError('Failed to create device')
else:
- new_vscsi_sxp = ['vscsi']
+ new_vscsi_sxp = ['vscsi', ['feature-host', 0]]
for existing_dev in sxp.children(cur_vscsi_sxp, 'dev'):
new_vscsi_sxp.append(existing_dev)
new_vscsi_sxp.append(sxp.child0(target_vscsi_sxp, 'dev'))
dev_uuid = sxp.child_value(cur_vscsi_sxp, 'uuid')
target_dev = None
- new_vscsi_sxp = ['vscsi']
+ new_vscsi_sxp = ['vscsi', ['feature-host', 0]]
for dev in sxp.children(cur_vscsi_sxp, 'dev'):
if vHCTL == sxp.child_value(dev, 'v-dev'):
target_dev = dev
raise XendError('Failed to destroy device')
target_dev.append(['state', xenbusState['Closing']])
- target_vscsi_sxp = ['vscsi', target_dev]
+ target_vscsi_sxp = ['vscsi', target_dev, ['feature-host', 0]]
if self._stateGet() != XEN_API_VM_POWER_STATE_RUNNING: