Merge "Huawei: Support reporting disk type of pool"

This commit is contained in:
Jenkins 2016-07-20 16:53:46 +00:00 committed by Gerrit Code Review
commit 54c5d0c01d
4 changed files with 107 additions and 11 deletions

View File

@ -307,7 +307,10 @@ FAKE_STORAGE_POOL_RESPONSE = """
"USERFREECAPACITY": "985661440", "USERFREECAPACITY": "985661440",
"ID": "0", "ID": "0",
"NAME": "OpenStack_Pool", "NAME": "OpenStack_Pool",
"USERTOTALCAPACITY": "985661440" "USERTOTALCAPACITY": "985661440",
"TIER0CAPACITY": "100",
"TIER1CAPACITY": "0",
"TIER2CAPACITY": "0"
}] }]
} }
""" """
@ -2433,7 +2436,7 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
def test_get_volume_status(self): def test_get_volume_status(self):
data = self.driver.get_volume_stats() data = self.driver.get_volume_stats()
self.assertEqual('2.0.8', data['driver_version']) self.assertEqual(self.driver.VERSION, data['driver_version'])
@mock.patch.object(rest_client.RestClient, 'get_lun_info', @mock.patch.object(rest_client.RestClient, 'get_lun_info',
return_value={"CAPACITY": 6291456}) return_value={"CAPACITY": 6291456})
@ -2556,20 +2559,31 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
"ID": "0", "ID": "0",
"USERFREECAPACITY": "36", "USERFREECAPACITY": "36",
"USERTOTALCAPACITY": "48", "USERTOTALCAPACITY": "48",
"USAGETYPE": constants.BLOCK_STORAGE_POOL_TYPE}, "USAGETYPE": constants.BLOCK_STORAGE_POOL_TYPE,
"TIER0CAPACITY": "48",
"TIER1CAPACITY": "0",
"TIER2CAPACITY": "0"},
{"NAME": "test002", {"NAME": "test002",
"ID": "1", "ID": "1",
"USERFREECAPACITY": "37", "USERFREECAPACITY": "37",
"USERTOTALCAPACITY": "49", "USERTOTALCAPACITY": "49",
"USAGETYPE": constants.FILE_SYSTEM_POOL_TYPE}, "USAGETYPE": constants.FILE_SYSTEM_POOL_TYPE,
"TIER0CAPACITY": "0",
"TIER1CAPACITY": "49",
"TIER2CAPACITY": "0"},
{"NAME": "test003", {"NAME": "test003",
"ID": "0", "ID": "0",
"USERFREECAPACITY": "36", "USERFREECAPACITY": "36",
"DATASPACE": "35", "DATASPACE": "35",
"USERTOTALCAPACITY": "48", "USERTOTALCAPACITY": "48",
"USAGETYPE": constants.BLOCK_STORAGE_POOL_TYPE}] "USAGETYPE": constants.BLOCK_STORAGE_POOL_TYPE,
"TIER0CAPACITY": "0",
"TIER1CAPACITY": "0",
"TIER2CAPACITY": "48"}]
pool_name = 'test001' pool_name = 'test001'
test_info = {'CAPACITY': '36', 'ID': '0', 'TOTALCAPACITY': '48'} test_info = {'CAPACITY': '36', 'ID': '0', 'TOTALCAPACITY': '48',
'TIER0CAPACITY': '48', 'TIER1CAPACITY': '0',
'TIER2CAPACITY': '0'}
pool_info = self.driver.client.get_pool_info(pool_name, pools) pool_info = self.driver.client.get_pool_info(pool_name, pools)
self.assertEqual(test_info, pool_info) self.assertEqual(test_info, pool_info)
@ -2584,7 +2598,9 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
self.assertEqual(test_info, pool_info) self.assertEqual(test_info, pool_info)
pool_name = 'test003' pool_name = 'test003'
test_info = {'CAPACITY': '35', 'ID': '0', 'TOTALCAPACITY': '48'} test_info = {'CAPACITY': '35', 'ID': '0', 'TOTALCAPACITY': '48',
'TIER0CAPACITY': '0', 'TIER1CAPACITY': '0',
'TIER2CAPACITY': '48'}
pool_info = self.driver.client.get_pool_info(pool_name, pools) pool_info = self.driver.client.get_pool_info(pool_name, pools)
self.assertEqual(test_info, pool_info) self.assertEqual(test_info, pool_info)
@ -3806,7 +3822,7 @@ class HuaweiFCDriverTestCase(HuaweiTestBase):
'get_remote_device_by_wwn', 'get_remote_device_by_wwn',
mock.Mock(return_value=remote_device_info)) mock.Mock(return_value=remote_device_info))
data = self.driver.get_volume_stats() data = self.driver.get_volume_stats()
self.assertEqual('2.0.8', data['driver_version']) self.assertEqual(self.driver.VERSION, data['driver_version'])
self.assertTrue(data['pools'][0]['replication_enabled']) self.assertTrue(data['pools'][0]['replication_enabled'])
self.assertListEqual(['sync', 'async'], self.assertListEqual(['sync', 'async'],
data['pools'][0]['replication_type']) data['pools'][0]['replication_type'])
@ -3823,9 +3839,60 @@ class HuaweiFCDriverTestCase(HuaweiTestBase):
'try_get_remote_wwn', 'try_get_remote_wwn',
mock.Mock(return_value={})) mock.Mock(return_value={}))
data = self.driver.get_volume_stats() data = self.driver.get_volume_stats()
self.assertEqual('2.0.8', data['driver_version']) self.assertEqual(self.driver.VERSION, data['driver_version'])
self.assertNotIn('replication_enabled', data['pools'][0]) self.assertNotIn('replication_enabled', data['pools'][0])
@ddt.data({'TIER0CAPACITY': '100',
'TIER1CAPACITY': '0',
'TIER2CAPACITY': '0',
'disktype': 'ssd'},
{'TIER0CAPACITY': '0',
'TIER1CAPACITY': '100',
'TIER2CAPACITY': '0',
'disktype': 'sas'},
{'TIER0CAPACITY': '0',
'TIER1CAPACITY': '0',
'TIER2CAPACITY': '100',
'disktype': 'nl_sas'},
{'TIER0CAPACITY': '100',
'TIER1CAPACITY': '100',
'TIER2CAPACITY': '100',
'disktype': 'mix'},
{'TIER0CAPACITY': '0',
'TIER1CAPACITY': '0',
'TIER2CAPACITY': '0',
'disktype': ''})
def test_get_volume_disk_type(self, disk_type_value):
response_dict = json.loads(FAKE_STORAGE_POOL_RESPONSE)
storage_pool_sas = copy.deepcopy(response_dict)
storage_pool_sas['data'][0]['TIER0CAPACITY'] = (
disk_type_value['TIER0CAPACITY'])
storage_pool_sas['data'][0]['TIER1CAPACITY'] = (
disk_type_value['TIER1CAPACITY'])
storage_pool_sas['data'][0]['TIER2CAPACITY'] = (
disk_type_value['TIER2CAPACITY'])
driver = FakeISCSIStorage(configuration=self.configuration)
driver.do_setup()
driver.replica = None
self.mock_object(rest_client.RestClient, 'get_all_pools',
mock.Mock(return_value=storage_pool_sas['data']))
data = driver.get_volume_stats()
if disk_type_value['disktype']:
self.assertEqual(disk_type_value['disktype'],
data['pools'][0]['disk_type'])
else:
self.assertIsNone(data['pools'][0].get('disk_type'))
def test_get_disk_type_pool_info_none(self):
driver = FakeISCSIStorage(configuration=self.configuration)
driver.do_setup()
driver.replica = None
self.mock_object(rest_client.RestClient, 'get_pool_info',
mock.Mock(return_value=None))
data = driver.get_volume_stats()
self.assertIsNone(data['pools'][0].get('disk_type'))
def test_extend_volume(self): def test_extend_volume(self):
self.driver.extend_volume(self.volume, 3) self.driver.extend_volume(self.volume, 3)

View File

@ -1830,9 +1830,10 @@ class HuaweiISCSIDriver(HuaweiBaseDriver, driver.ISCSIDriver):
Consistency group support Consistency group support
Cgsnapshot support Cgsnapshot support
2.0.8 - Backup snapshot optimal path support 2.0.8 - Backup snapshot optimal path support
2.0.9 - Support reporting disk type of pool
""" """
VERSION = "2.0.8" VERSION = "2.0.9"
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(HuaweiISCSIDriver, self).__init__(*args, **kwargs) super(HuaweiISCSIDriver, self).__init__(*args, **kwargs)
@ -2029,9 +2030,10 @@ class HuaweiFCDriver(HuaweiBaseDriver, driver.FibreChannelDriver):
Consistency group support Consistency group support
Cgsnapshot support Cgsnapshot support
2.0.8 - Backup snapshot optimal path support 2.0.8 - Backup snapshot optimal path support
2.0.9 - Support reporting disk type of pool
""" """
VERSION = "2.0.8" VERSION = "2.0.9"
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(HuaweiFCDriver, self).__init__(*args, **kwargs) super(HuaweiFCDriver, self).__init__(*args, **kwargs)

View File

@ -250,6 +250,9 @@ class RestClient(object):
info['ID'] = pool['ID'] info['ID'] = pool['ID']
info['CAPACITY'] = pool.get('DATASPACE', pool['USERFREECAPACITY']) info['CAPACITY'] = pool.get('DATASPACE', pool['USERFREECAPACITY'])
info['TOTALCAPACITY'] = pool['USERTOTALCAPACITY'] info['TOTALCAPACITY'] = pool['USERTOTALCAPACITY']
info['TIER0CAPACITY'] = pool['TIER0CAPACITY']
info['TIER1CAPACITY'] = pool['TIER1CAPACITY']
info['TIER2CAPACITY'] = pool['TIER2CAPACITY']
return info return info
@ -1021,6 +1024,22 @@ class RestClient(object):
return pool_capacity return pool_capacity
def _get_disk_type(self, pool_name, result):
"""Get disk type of the pool."""
pool_info = self.get_pool_info(pool_name, result)
if not pool_info:
return None
pool_disk = []
for i, x in enumerate(['ssd', 'sas', 'nl_sas']):
if pool_info['TIER%dCAPACITY' % i] != '0':
pool_disk.append(x)
if len(pool_disk) > 1:
pool_disk = ['mix']
return pool_disk[0] if pool_disk else None
def get_luncopy_info(self, luncopy_id): def get_luncopy_info(self, luncopy_id):
"""Get LUNcopy information.""" """Get LUNcopy information."""
url = "/LUNCOPY?range=[0-1023]" url = "/LUNCOPY?range=[0-1023]"
@ -1158,6 +1177,7 @@ class RestClient(object):
result = self.get_all_pools() result = self.get_all_pools()
for pool_name in self.storage_pools: for pool_name in self.storage_pools:
capacity = self._get_capacity(pool_name, result) capacity = self._get_capacity(pool_name, result)
disk_type = self._get_disk_type(pool_name, result)
pool = {} pool = {}
pool.update(dict( pool.update(dict(
location_info=self.device_id, location_info=self.device_id,
@ -1177,6 +1197,9 @@ class RestClient(object):
hypermetro=True, hypermetro=True,
consistencygroup_support=True, consistencygroup_support=True,
)) ))
if disk_type:
pool['disk_type'] = disk_type
data['pools'].append(pool) data['pools'].append(pool)
return data return data

View File

@ -0,0 +1,4 @@
---
features:
- Add support for reporting pool disk type in Huawei
driver.