# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1237376060 0
# Node ID 6e619d8eece54ff3548a933bfe6cbc06d4559ef5
# Parent f8201aea88a43ccf52ed6b201e5a31fc97468e35
xend: Fix vscsi assignment when XenAPI is available
When XenAPI is available, xm scsi-attach fails. Also xm new and
xm create fail if a vscsi parameter is defined into domain
configuration files.
Signed-off-by: Masaki Kanno <kanno.masaki@xxxxxxxxxxxxxx>
---
tools/python/xen/xend/XendConfig.py | 5 ++++-
tools/python/xen/xend/XendDomainInfo.py | 9 +++++----
tools/python/xen/xm/create.py | 3 +++
tools/python/xen/xm/main.py | 3 +++
4 files changed, 15 insertions(+), 5 deletions(-)
diff -r f8201aea88a4 -r 6e619d8eece5 tools/python/xen/xend/XendConfig.py
--- a/tools/python/xen/xend/XendConfig.py Wed Mar 18 11:32:46 2009 +0000
+++ b/tools/python/xen/xend/XendConfig.py Wed Mar 18 11:34:20 2009 +0000
@@ -1848,8 +1848,11 @@ class XendConfig(dict):
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:
diff -r f8201aea88a4 -r 6e619d8eece5 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py Wed Mar 18 11:32:46 2009 +0000
+++ b/tools/python/xen/xend/XendDomainInfo.py Wed Mar 18 11:34:20 2009 +0000
@@ -3703,7 +3703,8 @@ class XendDomainInfo:
['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:
@@ -3716,7 +3717,7 @@ class XendDomainInfo:
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'))
@@ -3810,7 +3811,7 @@ class XendDomainInfo:
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
@@ -3821,7 +3822,7 @@ class XendDomainInfo:
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:
diff -r f8201aea88a4 -r 6e619d8eece5 tools/python/xen/xm/create.py
--- a/tools/python/xen/xm/create.py Wed Mar 18 11:32:46 2009 +0000
+++ b/tools/python/xen/xm/create.py Wed Mar 18 11:34:20 2009 +0000
@@ -738,6 +738,9 @@ def configure_vscsis(config_devs, vals):
feature_host = 0
if v_dev == 'host':
+ if serverType == SERVER_XEN_API:
+ # TODO
+ raise ValueError("SCSI devices assignment by HBA is not
implemeted")
feature_host = 1
scsi_info = []
devid = get_devid(p_hctl)
diff -r f8201aea88a4 -r 6e619d8eece5 tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py Wed Mar 18 11:32:46 2009 +0000
+++ b/tools/python/xen/xm/main.py Wed Mar 18 11:34:20 2009 +0000
@@ -2539,6 +2539,9 @@ def parse_scsi_configuration(p_scsi, v_h
if p_scsi is not None:
# xm scsi-attach
if v_hctl == "host":
+ if serverType == SERVER_XEN_API:
+ # TODO
+ raise OptionError("SCSI devices assignment by HBA is not
implemeted")
host_mode = 1
scsi_devices = vscsi_util.vscsi_get_scsidevices()
elif len(v_hctl.split(':')) != 4:
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|