Merge "[IBM DS8K]: Fixed rest API issue to get bundle" into stable/ussuri
This commit is contained in:
@@ -535,7 +535,7 @@ FAKE_GET_SYSTEM_RESPONSE_1 = {
|
|||||||
"name": "",
|
"name": "",
|
||||||
"state": "online",
|
"state": "online",
|
||||||
"release": "7.5.1",
|
"release": "7.5.1",
|
||||||
"bundle": "87.51.9.0",
|
"bundle": "87.51.63.0",
|
||||||
"MTM": "2421-961",
|
"MTM": "2421-961",
|
||||||
"sn": "1300741",
|
"sn": "1300741",
|
||||||
"wwnn": TEST_SOURCE_WWNN,
|
"wwnn": TEST_SOURCE_WWNN,
|
||||||
@@ -563,7 +563,7 @@ FAKE_GET_SYSTEM_RESPONSE_2 = {
|
|||||||
"name": "",
|
"name": "",
|
||||||
"state": "online",
|
"state": "online",
|
||||||
"release": "7.5.1",
|
"release": "7.5.1",
|
||||||
"bundle": "87.51.9.0",
|
"bundle": "87.51.63.0",
|
||||||
"MTM": "2421-962",
|
"MTM": "2421-962",
|
||||||
"sn": "1300742",
|
"sn": "1300742",
|
||||||
"wwnn": TEST_TARGET_WWNN,
|
"wwnn": TEST_TARGET_WWNN,
|
||||||
@@ -989,7 +989,7 @@ class FakeDS8KCommonHelper(helper.DS8KCommonHelper):
|
|||||||
self._get_value('san_login'),
|
self._get_value('san_login'),
|
||||||
self._get_value('san_password'),
|
self._get_value('san_password'),
|
||||||
None, True)
|
None, True)
|
||||||
self.backend['rest_version'] = self._get_version()['bundle_version']
|
self.backend['rest_version'] = self._get_version()['bundle']
|
||||||
|
|
||||||
|
|
||||||
class FakeDS8KECKDHelper(FakeDS8KCommonHelper, helper.DS8KECKDHelper):
|
class FakeDS8KECKDHelper(FakeDS8KCommonHelper, helper.DS8KECKDHelper):
|
||||||
@@ -1167,7 +1167,7 @@ class DS8KProxyTest(test.TestCase):
|
|||||||
def test_verify_rest_version_for_5_7_fb(self, mock_get_version):
|
def test_verify_rest_version_for_5_7_fb(self, mock_get_version):
|
||||||
"""test the min version of REST for fb volume in 7.x."""
|
"""test the min version of REST for fb volume in 7.x."""
|
||||||
mock_get_version.return_value = {
|
mock_get_version.return_value = {
|
||||||
"bundle_version": "5.7.50.0"
|
"bundle": "87.50.38.0"
|
||||||
}
|
}
|
||||||
self.assertRaises(exception.VolumeDriverException,
|
self.assertRaises(exception.VolumeDriverException,
|
||||||
FakeDS8KCommonHelper, self.configuration, None)
|
FakeDS8KCommonHelper, self.configuration, None)
|
||||||
@@ -1176,7 +1176,7 @@ class DS8KProxyTest(test.TestCase):
|
|||||||
def test_verify_rest_version_for_5_8_fb(self, mock_get_version):
|
def test_verify_rest_version_for_5_8_fb(self, mock_get_version):
|
||||||
"""test the min version of REST for fb volume in 8.1."""
|
"""test the min version of REST for fb volume in 8.1."""
|
||||||
mock_get_version.return_value = {
|
mock_get_version.return_value = {
|
||||||
"bundle_version": "5.8.10.0"
|
"bundle": "88.10.112.0"
|
||||||
}
|
}
|
||||||
FakeDS8KCommonHelper(self.configuration, None)
|
FakeDS8KCommonHelper(self.configuration, None)
|
||||||
|
|
||||||
@@ -1189,7 +1189,7 @@ class DS8KProxyTest(test.TestCase):
|
|||||||
self.configuration.ds8k_ssid_prefix = 'FF'
|
self.configuration.ds8k_ssid_prefix = 'FF'
|
||||||
self.configuration.san_clustername = TEST_ECKD_POOL_ID
|
self.configuration.san_clustername = TEST_ECKD_POOL_ID
|
||||||
mock_get_version.return_value = {
|
mock_get_version.return_value = {
|
||||||
"bundle_version": "5.7.50.0"
|
"bundle": "87.50.22.0"
|
||||||
}
|
}
|
||||||
self.assertRaises(exception.VolumeDriverException,
|
self.assertRaises(exception.VolumeDriverException,
|
||||||
FakeDS8KECKDHelper, self.configuration, None)
|
FakeDS8KECKDHelper, self.configuration, None)
|
||||||
@@ -1203,7 +1203,7 @@ class DS8KProxyTest(test.TestCase):
|
|||||||
self.configuration.ds8k_ssid_prefix = 'FF'
|
self.configuration.ds8k_ssid_prefix = 'FF'
|
||||||
self.configuration.san_clustername = TEST_ECKD_POOL_ID
|
self.configuration.san_clustername = TEST_ECKD_POOL_ID
|
||||||
mock_get_version.return_value = {
|
mock_get_version.return_value = {
|
||||||
"bundle_version": "5.8.10.0"
|
"bundle": "88.10.112.0"
|
||||||
}
|
}
|
||||||
self.assertRaises(exception.VolumeDriverException,
|
self.assertRaises(exception.VolumeDriverException,
|
||||||
FakeDS8KECKDHelper, self.configuration, None)
|
FakeDS8KECKDHelper, self.configuration, None)
|
||||||
@@ -1217,7 +1217,7 @@ class DS8KProxyTest(test.TestCase):
|
|||||||
self.configuration.ds8k_ssid_prefix = 'FF'
|
self.configuration.ds8k_ssid_prefix = 'FF'
|
||||||
self.configuration.san_clustername = TEST_ECKD_POOL_ID
|
self.configuration.san_clustername = TEST_ECKD_POOL_ID
|
||||||
mock_get_version.return_value = {
|
mock_get_version.return_value = {
|
||||||
"bundle_version": "5.8.20.0"
|
"bundle": "88.20.40.0"
|
||||||
}
|
}
|
||||||
self.assertRaises(exception.VolumeDriverException,
|
self.assertRaises(exception.VolumeDriverException,
|
||||||
FakeDS8KECKDHelper, self.configuration, None)
|
FakeDS8KECKDHelper, self.configuration, None)
|
||||||
@@ -3214,8 +3214,8 @@ class DS8KProxyTest(test.TestCase):
|
|||||||
self.driver.create_group,
|
self.driver.create_group,
|
||||||
self.ctxt, group)
|
self.ctxt, group)
|
||||||
|
|
||||||
@ddt.data({'bundle_version': "5.7.51.1067"},
|
@ddt.data({'bundle': "87.51.60.0"},
|
||||||
{'bundle_version': "5.8.20.1058"})
|
{'bundle': "88.20.47.0"})
|
||||||
@mock.patch.object(helper.DS8KCommonHelper, '_get_version')
|
@mock.patch.object(helper.DS8KCommonHelper, '_get_version')
|
||||||
def test_create_replication_consisgroup_should_verify_rest_version(
|
def test_create_replication_consisgroup_should_verify_rest_version(
|
||||||
self, rest_version, mock_get_version):
|
self, rest_version, mock_get_version):
|
||||||
|
|||||||
@@ -61,10 +61,10 @@ class DS8KCommonHelper(object):
|
|||||||
|
|
||||||
OPTIONAL_PARAMS = ['ds8k_host_type', 'lss_range_for_cg']
|
OPTIONAL_PARAMS = ['ds8k_host_type', 'lss_range_for_cg']
|
||||||
# if use new REST API, please update the version below
|
# if use new REST API, please update the version below
|
||||||
VALID_REST_VERSION_5_7_MIN = '5.7.51.1047'
|
VALID_REST_VERSION_87_51_MIN = '87.51.52.0'
|
||||||
INVALID_STORAGE_VERSION = '8.0.1'
|
INVALID_STORAGE_VERSION = '8.0.1'
|
||||||
REST_VERSION_5_7_MIN_PPRC_CG = '5.7.51.1068'
|
REST_VERSION_87_51_MIN_PPRC_CG = '87.51.63.0'
|
||||||
REST_VERSION_5_8_MIN_PPRC_CG = '5.8.20.1059'
|
REST_VERSION_88_20_MIN_PPRC_CG = '88.20.112.0'
|
||||||
|
|
||||||
def __init__(self, conf, HTTPConnectorObject=None):
|
def __init__(self, conf, HTTPConnectorObject=None):
|
||||||
self.conf = conf
|
self.conf = conf
|
||||||
@@ -148,7 +148,7 @@ class DS8KCommonHelper(object):
|
|||||||
except restclient.TimeoutException:
|
except restclient.TimeoutException:
|
||||||
raise restclient.APIException(
|
raise restclient.APIException(
|
||||||
data=(_("Can't connect to %(host)s") % {'host': san_ip}))
|
data=(_("Can't connect to %(host)s") % {'host': san_ip}))
|
||||||
self.backend['rest_version'] = self._get_version()['bundle_version']
|
self.backend['rest_version'] = self._get_version()['bundle']
|
||||||
LOG.info("Connection to DS8K storage system %(host)s has been "
|
LOG.info("Connection to DS8K storage system %(host)s has been "
|
||||||
"established successfully, the version of REST is %(rest)s.",
|
"established successfully, the version of REST is %(rest)s.",
|
||||||
{'host': self._get_value('san_ip'),
|
{'host': self._get_value('san_ip'),
|
||||||
@@ -224,14 +224,15 @@ class DS8KCommonHelper(object):
|
|||||||
"if you want to use this version of driver, "
|
"if you want to use this version of driver, "
|
||||||
"please upgrade the CCL.")
|
"please upgrade the CCL.")
|
||||||
% self.INVALID_STORAGE_VERSION))
|
% self.INVALID_STORAGE_VERSION))
|
||||||
if ('5.7' in self.backend['rest_version'] and
|
rest_ver = self.backend['rest_version'][0:2]
|
||||||
|
if ('87' == rest_ver and
|
||||||
dist_version.LooseVersion(self.backend['rest_version']) <
|
dist_version.LooseVersion(self.backend['rest_version']) <
|
||||||
dist_version.LooseVersion(self.VALID_REST_VERSION_5_7_MIN)):
|
dist_version.LooseVersion(self.VALID_REST_VERSION_87_51_MIN)):
|
||||||
raise exception.VolumeDriverException(
|
raise exception.VolumeDriverException(
|
||||||
message=(_("REST version %(invalid)s is lower than "
|
message=(_("REST version %(invalid)s is lower than "
|
||||||
"%(valid)s, please upgrade it in DS8K.")
|
"%(valid)s, please upgrade it in DS8K.")
|
||||||
% {'invalid': self.backend['rest_version'],
|
% {'invalid': self.backend['rest_version'],
|
||||||
'valid': self.VALID_REST_VERSION_5_7_MIN}))
|
'valid': self.VALID_REST_VERSION_87_51_MIN}))
|
||||||
|
|
||||||
def verify_rest_version_for_pprc_cg(self):
|
def verify_rest_version_for_pprc_cg(self):
|
||||||
if '8.1' in self.backend['rest_version']:
|
if '8.1' in self.backend['rest_version']:
|
||||||
@@ -239,14 +240,15 @@ class DS8KCommonHelper(object):
|
|||||||
message=_("REST for DS8K 8.1 does not support PPRC "
|
message=_("REST for DS8K 8.1 does not support PPRC "
|
||||||
"consistency group, please upgrade the CCL."))
|
"consistency group, please upgrade the CCL."))
|
||||||
valid_rest_version = None
|
valid_rest_version = None
|
||||||
if ('5.7' in self.backend['rest_version'] and
|
rest_ver = self.backend['rest_version'][0:2]
|
||||||
|
if ('87' == rest_ver and
|
||||||
dist_version.LooseVersion(self.backend['rest_version']) <
|
dist_version.LooseVersion(self.backend['rest_version']) <
|
||||||
dist_version.LooseVersion(self.REST_VERSION_5_7_MIN_PPRC_CG)):
|
dist_version.LooseVersion(self.REST_VERSION_87_51_MIN_PPRC_CG)):
|
||||||
valid_rest_version = self.REST_VERSION_5_7_MIN_PPRC_CG
|
valid_rest_version = self.REST_VERSION_87_51_MIN_PPRC_CG
|
||||||
elif ('5.8' in self.backend['rest_version'] and
|
elif ('88' == rest_ver and
|
||||||
dist_version.LooseVersion(self.backend['rest_version']) <
|
dist_version.LooseVersion(self.backend['rest_version']) <
|
||||||
dist_version.LooseVersion(self.REST_VERSION_5_8_MIN_PPRC_CG)):
|
dist_version.LooseVersion(self.REST_VERSION_88_20_MIN_PPRC_CG)):
|
||||||
valid_rest_version = self.REST_VERSION_5_8_MIN_PPRC_CG
|
valid_rest_version = self.REST_VERSION_88_20_MIN_PPRC_CG
|
||||||
|
|
||||||
if valid_rest_version:
|
if valid_rest_version:
|
||||||
raise exception.VolumeDriverException(
|
raise exception.VolumeDriverException(
|
||||||
@@ -760,7 +762,7 @@ class DS8KCommonHelper(object):
|
|||||||
self._client.send('DELETE', '/volumes/%s' % lun_id)
|
self._client.send('DELETE', '/volumes/%s' % lun_id)
|
||||||
|
|
||||||
def _get_version(self):
|
def _get_version(self):
|
||||||
return self._client.fetchone('GET', '')
|
return self._client.fetchone('GET', '/systems')
|
||||||
|
|
||||||
@proxy.logger
|
@proxy.logger
|
||||||
def _create_lun(self, volData):
|
def _create_lun(self, volData):
|
||||||
@@ -1042,8 +1044,8 @@ class DS8KECKDHelper(DS8KCommonHelper):
|
|||||||
OPTIONAL_PARAMS = ['ds8k_host_type', 'port_pairs', 'ds8k_ssid_prefix',
|
OPTIONAL_PARAMS = ['ds8k_host_type', 'port_pairs', 'ds8k_ssid_prefix',
|
||||||
'lss_range_for_cg']
|
'lss_range_for_cg']
|
||||||
# if use new REST API, please update the version below
|
# if use new REST API, please update the version below
|
||||||
VALID_REST_VERSION_5_7_MIN = '5.7.51.1068'
|
VALID_REST_VERSION_87_51_MIN = '87.51.63.0'
|
||||||
VALID_REST_VERSION_5_8_MIN = '5.8.20.1059'
|
VALID_REST_VERSION_88_20_MIN = '88.20.112.0'
|
||||||
MIN_VALID_STORAGE_VERSION = '8.1'
|
MIN_VALID_STORAGE_VERSION = '8.1'
|
||||||
INVALID_STORAGE_VERSION = '8.0.1'
|
INVALID_STORAGE_VERSION = '8.0.1'
|
||||||
|
|
||||||
@@ -1094,19 +1096,20 @@ class DS8KECKDHelper(DS8KCommonHelper):
|
|||||||
dist_version.LooseVersion(self.MIN_VALID_STORAGE_VERSION)):
|
dist_version.LooseVersion(self.MIN_VALID_STORAGE_VERSION)):
|
||||||
self._disable_thin_provision = True
|
self._disable_thin_provision = True
|
||||||
|
|
||||||
if (('5.7' in self.backend['rest_version'] and
|
rest_ver = self.backend['rest_version'][0:2]
|
||||||
|
if (('87' == rest_ver and
|
||||||
dist_version.LooseVersion(self.backend['rest_version']) <
|
dist_version.LooseVersion(self.backend['rest_version']) <
|
||||||
dist_version.LooseVersion(self.VALID_REST_VERSION_5_7_MIN)) or
|
dist_version.LooseVersion(self.VALID_REST_VERSION_87_51_MIN)) or
|
||||||
('5.8' in self.backend['rest_version'] and
|
('88' == rest_ver and
|
||||||
dist_version.LooseVersion(self.backend['rest_version']) <
|
dist_version.LooseVersion(self.backend['rest_version']) <
|
||||||
dist_version.LooseVersion(self.VALID_REST_VERSION_5_8_MIN))):
|
dist_version.LooseVersion(self.VALID_REST_VERSION_88_20_MIN))):
|
||||||
raise exception.VolumeDriverException(
|
raise exception.VolumeDriverException(
|
||||||
message=(_("REST version %(invalid)s is lower than "
|
message=(_("REST version %(invalid)s is lower than "
|
||||||
"%(valid)s, please upgrade it in DS8K.")
|
"%(valid)s, please upgrade it in DS8K.")
|
||||||
% {'invalid': self.backend['rest_version'],
|
% {'invalid': self.backend['rest_version'],
|
||||||
'valid': (self.VALID_REST_VERSION_5_7_MIN if '5.7'
|
'valid': (self.VALID_REST_VERSION_87_51_MIN
|
||||||
in self.backend['rest_version'] else
|
if '87' == rest_ver else
|
||||||
self.VALID_REST_VERSION_5_8_MIN)}))
|
self.VALID_REST_VERSION_88_20_MIN)}))
|
||||||
|
|
||||||
@proxy.logger
|
@proxy.logger
|
||||||
def _get_device_mapping(self):
|
def _get_device_mapping(self):
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
`Bug #1895510 <https://bugs.launchpad.net/cinder/+bug/1895510>`_:
|
||||||
|
IBM DS8K: Fixed compatability issue when using the IBM DS8K driver
|
||||||
|
with storage version R9 and later.
|
||||||
Reference in New Issue
Block a user