ds8k: should verify REST version separately
for fb and ckd volume, they require different versions of REST API, because APIs supporting their features are added one by one and not at the same time, so driver should separate them when verifying REST version, otherwise it will make user need to upgrade REST unnecessarily. Change-Id: Ib42db3f06705212fe3b8f4cfcb625d8a5fb270b7 backport: Ocata Closes-Bug: #1680379
This commit is contained in:
parent
ae1df67883
commit
5693012f7a
@ -580,7 +580,7 @@ FAKE_GET_REST_VERSION_RESPONSE = {
|
||||
"api_info":
|
||||
[
|
||||
{
|
||||
"bundle_version": "5.7.51.1047"
|
||||
"bundle_version": "5.7.51.1068"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1111,22 +1111,63 @@ class DS8KProxyTest(test.TestCase):
|
||||
FakeDS8KCommonHelper, self.configuration, None)
|
||||
|
||||
@mock.patch.object(helper.DS8KCommonHelper, '_get_version')
|
||||
def test_verify_rest_version_for_5_7(self, mock_get_version):
|
||||
"""test the min version of REST version for 7.x."""
|
||||
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."""
|
||||
mock_get_version.return_value = {
|
||||
"bundle_version": "5.7.0.0"
|
||||
"bundle_version": "5.7.50.0"
|
||||
}
|
||||
self.assertRaises(exception.VolumeDriverException,
|
||||
FakeDS8KCommonHelper, self.configuration, None)
|
||||
|
||||
@mock.patch.object(helper.DS8KCommonHelper, '_get_version')
|
||||
def test_verify_rest_version_for_5_8(self, mock_get_version):
|
||||
"""test the min version of REST version for 8.x."""
|
||||
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."""
|
||||
mock_get_version.return_value = {
|
||||
"bundle_version": "5.8.0.0"
|
||||
"bundle_version": "5.8.10.0"
|
||||
}
|
||||
FakeDS8KCommonHelper(self.configuration, None)
|
||||
|
||||
@mock.patch.object(helper.DS8KECKDHelper, '_get_version')
|
||||
def test_verify_rest_version_for_5_7_eckd(self, mock_get_version):
|
||||
"""test the min version of REST for eckd volume in 7.x."""
|
||||
self.configuration.connection_type = (
|
||||
storage.XIV_CONNECTION_TYPE_FC_ECKD)
|
||||
self.configuration.ds8k_devadd_unitadd_mapping = 'C4-10'
|
||||
self.configuration.ds8k_ssid_prefix = 'FF'
|
||||
self.configuration.san_clustername = TEST_ECKD_POOL_ID
|
||||
mock_get_version.return_value = {
|
||||
"bundle_version": "5.7.50.0"
|
||||
}
|
||||
self.assertRaises(exception.VolumeDriverException,
|
||||
FakeDS8KCommonHelper, self.configuration, None)
|
||||
FakeDS8KECKDHelper, self.configuration, None)
|
||||
|
||||
@mock.patch.object(helper.DS8KECKDHelper, '_get_version')
|
||||
def test_verify_rest_version_for_5_8_eckd_1(self, mock_get_version):
|
||||
"""test the min version of REST for eckd volume in 8.1."""
|
||||
self.configuration.connection_type = (
|
||||
storage.XIV_CONNECTION_TYPE_FC_ECKD)
|
||||
self.configuration.ds8k_devadd_unitadd_mapping = 'C4-10'
|
||||
self.configuration.ds8k_ssid_prefix = 'FF'
|
||||
self.configuration.san_clustername = TEST_ECKD_POOL_ID
|
||||
mock_get_version.return_value = {
|
||||
"bundle_version": "5.8.10.0"
|
||||
}
|
||||
self.assertRaises(exception.VolumeDriverException,
|
||||
FakeDS8KECKDHelper, self.configuration, None)
|
||||
|
||||
@mock.patch.object(helper.DS8KECKDHelper, '_get_version')
|
||||
def test_verify_rest_version_for_5_8_eckd_2(self, mock_get_version):
|
||||
"""test the min version of REST for eckd volume in 8.2."""
|
||||
self.configuration.connection_type = (
|
||||
storage.XIV_CONNECTION_TYPE_FC_ECKD)
|
||||
self.configuration.ds8k_devadd_unitadd_mapping = 'C4-10'
|
||||
self.configuration.ds8k_ssid_prefix = 'FF'
|
||||
self.configuration.san_clustername = TEST_ECKD_POOL_ID
|
||||
mock_get_version.return_value = {
|
||||
"bundle_version": "5.8.20.0"
|
||||
}
|
||||
self.assertRaises(exception.VolumeDriverException,
|
||||
FakeDS8KECKDHelper, self.configuration, None)
|
||||
|
||||
def test_verify_pools_with_wrong_type(self):
|
||||
"""pool should be set according to the connection type."""
|
||||
|
@ -37,10 +37,6 @@ LOG = logging.getLogger(__name__)
|
||||
|
||||
LSS_VOL_SLOTS = 0x100
|
||||
LSS_SLOTS = 0xFF
|
||||
# if use new REST API, please update the version below
|
||||
VALID_REST_VERSION_5_7_MIN = '5.7.51.1047'
|
||||
VALID_REST_VERSION_5_8_MIN = '5.8.20.1018'
|
||||
VALID_STORAGE_VERSION = '8.1'
|
||||
|
||||
VALID_HOST_TYPES = (
|
||||
'auto', 'AMDLinuxRHEL', 'AMDLinuxSuse',
|
||||
@ -63,6 +59,10 @@ class DS8KCommonHelper(object):
|
||||
"""Manage the primary backend, it is common class too."""
|
||||
|
||||
OPTIONAL_PARAMS = ['ds8k_host_type', 'lss_range_for_cg']
|
||||
# if use new REST API, please update the version below
|
||||
VALID_REST_VERSION_5_7_MIN = '5.7.51.1047'
|
||||
VALID_REST_VERSION_5_8_MIN = ''
|
||||
INVALID_STORAGE_VERSION = '8.0.1'
|
||||
|
||||
def __init__(self, conf, HTTPConnectorObject=None):
|
||||
self.conf = conf
|
||||
@ -187,32 +187,20 @@ class DS8KCommonHelper(object):
|
||||
None if ds8k_host_type == 'auto' else ds8k_host_type)
|
||||
|
||||
def _verify_version(self):
|
||||
if self.backend['storage_version'] == '8.0.1':
|
||||
if self.backend['storage_version'] == self.INVALID_STORAGE_VERSION:
|
||||
raise exception.VolumeDriverException(
|
||||
data=(_("8.0.1 does not support bulk deletion of volumes, "
|
||||
"if you want to use this version of driver, "
|
||||
"please upgrade the CCL, and make sure the REST "
|
||||
"version is not lower than %s.")
|
||||
% VALID_REST_VERSION_5_8_MIN))
|
||||
else:
|
||||
if (('5.7' in self.backend['rest_version'] and
|
||||
dist_version.LooseVersion(self.backend['rest_version']) <
|
||||
dist_version.LooseVersion(VALID_REST_VERSION_5_7_MIN)) or
|
||||
('5.8' in self.backend['rest_version'] and
|
||||
dist_version.LooseVersion(self.backend['rest_version']) <
|
||||
dist_version.LooseVersion(VALID_REST_VERSION_5_8_MIN))):
|
||||
raise exception.VolumeDriverException(
|
||||
data=(_("REST version %(invalid)s is lower than "
|
||||
"%(valid)s, please upgrade it in DS8K.")
|
||||
% {'invalid': self.backend['rest_version'],
|
||||
'valid': (VALID_REST_VERSION_5_7_MIN if '5.7' in
|
||||
self.backend['rest_version'] else
|
||||
VALID_REST_VERSION_5_8_MIN)}))
|
||||
|
||||
if self._connection_type == storage.XIV_CONNECTION_TYPE_FC_ECKD:
|
||||
if (dist_version.LooseVersion(self.backend['storage_version']) <
|
||||
dist_version.LooseVersion(VALID_STORAGE_VERSION)):
|
||||
self._disable_thin_provision = True
|
||||
message=(_("%s does not support bulk deletion of volumes, "
|
||||
"if you want to use this version of driver, "
|
||||
"please upgrade the CCL.")
|
||||
% self.INVALID_STORAGE_VERSION))
|
||||
if ('5.7' in self.backend['rest_version'] and
|
||||
dist_version.LooseVersion(self.backend['rest_version']) <
|
||||
dist_version.LooseVersion(self.VALID_REST_VERSION_5_7_MIN)):
|
||||
raise exception.VolumeDriverException(
|
||||
message=(_("REST version %(invalid)s is lower than "
|
||||
"%(valid)s, please upgrade it in DS8K.")
|
||||
% {'invalid': self.backend['rest_version'],
|
||||
'valid': self.VALID_REST_VERSION_5_7_MIN}))
|
||||
|
||||
def _verify_pools(self):
|
||||
if self._connection_type == storage.XIV_CONNECTION_TYPE_FC:
|
||||
@ -905,6 +893,11 @@ class DS8KECKDHelper(DS8KCommonHelper):
|
||||
|
||||
OPTIONAL_PARAMS = ['ds8k_host_type', 'port_pairs', 'ds8k_ssid_prefix',
|
||||
'lss_range_for_cg']
|
||||
# if use new REST API, please update the version below
|
||||
VALID_REST_VERSION_5_7_MIN = '5.7.51.1068'
|
||||
VALID_REST_VERSION_5_8_MIN = '5.8.20.1059'
|
||||
MIN_VALID_STORAGE_VERSION = '8.1'
|
||||
INVALID_STORAGE_VERSION = '8.0.1'
|
||||
|
||||
@staticmethod
|
||||
def _gb2cyl(gb):
|
||||
@ -940,6 +933,32 @@ class DS8KECKDHelper(DS8KCommonHelper):
|
||||
self._verify_version()
|
||||
self._verify_pools()
|
||||
|
||||
def _verify_version(self):
|
||||
if self.backend['storage_version'] == self.INVALID_STORAGE_VERSION:
|
||||
raise exception.VolumeDriverException(
|
||||
message=(_("%s does not support bulk deletion of volumes, "
|
||||
"if you want to use this version of driver, "
|
||||
"please upgrade the CCL.")
|
||||
% self.INVALID_STORAGE_VERSION))
|
||||
# DS8K supports ECKD ESE volume from 8.1
|
||||
if (dist_version.LooseVersion(self.backend['storage_version']) <
|
||||
dist_version.LooseVersion(self.MIN_VALID_STORAGE_VERSION)):
|
||||
self._disable_thin_provision = True
|
||||
|
||||
if (('5.7' in self.backend['rest_version'] and
|
||||
dist_version.LooseVersion(self.backend['rest_version']) <
|
||||
dist_version.LooseVersion(self.VALID_REST_VERSION_5_7_MIN)) or
|
||||
('5.8' in self.backend['rest_version'] and
|
||||
dist_version.LooseVersion(self.backend['rest_version']) <
|
||||
dist_version.LooseVersion(self.VALID_REST_VERSION_5_8_MIN))):
|
||||
raise exception.VolumeDriverException(
|
||||
message=(_("REST version %(invalid)s is lower than "
|
||||
"%(valid)s, please upgrade it in DS8K.")
|
||||
% {'invalid': self.backend['rest_version'],
|
||||
'valid': (self.VALID_REST_VERSION_5_7_MIN if '5.7'
|
||||
in self.backend['rest_version'] else
|
||||
self.VALID_REST_VERSION_5_8_MIN)}))
|
||||
|
||||
@proxy.logger
|
||||
def _check_and_verify_lcus(self):
|
||||
map_str = self._get_value('ds8k_devadd_unitadd_mapping')
|
||||
|
Loading…
Reference in New Issue
Block a user