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",
"ID": "0",
"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):
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',
return_value={"CAPACITY": 6291456})
@ -2556,20 +2559,31 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
"ID": "0",
"USERFREECAPACITY": "36",
"USERTOTALCAPACITY": "48",
"USAGETYPE": constants.BLOCK_STORAGE_POOL_TYPE},
"USAGETYPE": constants.BLOCK_STORAGE_POOL_TYPE,
"TIER0CAPACITY": "48",
"TIER1CAPACITY": "0",
"TIER2CAPACITY": "0"},
{"NAME": "test002",
"ID": "1",
"USERFREECAPACITY": "37",
"USERTOTALCAPACITY": "49",
"USAGETYPE": constants.FILE_SYSTEM_POOL_TYPE},
"USAGETYPE": constants.FILE_SYSTEM_POOL_TYPE,
"TIER0CAPACITY": "0",
"TIER1CAPACITY": "49",
"TIER2CAPACITY": "0"},
{"NAME": "test003",
"ID": "0",
"USERFREECAPACITY": "36",
"DATASPACE": "35",
"USERTOTALCAPACITY": "48",
"USAGETYPE": constants.BLOCK_STORAGE_POOL_TYPE}]
"USAGETYPE": constants.BLOCK_STORAGE_POOL_TYPE,
"TIER0CAPACITY": "0",
"TIER1CAPACITY": "0",
"TIER2CAPACITY": "48"}]
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)
self.assertEqual(test_info, pool_info)
@ -2584,7 +2598,9 @@ class HuaweiISCSIDriverTestCase(HuaweiTestBase):
self.assertEqual(test_info, pool_info)
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)
self.assertEqual(test_info, pool_info)
@ -3806,7 +3822,7 @@ class HuaweiFCDriverTestCase(HuaweiTestBase):
'get_remote_device_by_wwn',
mock.Mock(return_value=remote_device_info))
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.assertListEqual(['sync', 'async'],
data['pools'][0]['replication_type'])
@ -3823,9 +3839,60 @@ class HuaweiFCDriverTestCase(HuaweiTestBase):
'try_get_remote_wwn',
mock.Mock(return_value={}))
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])
@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):
self.driver.extend_volume(self.volume, 3)

View File

@ -1830,9 +1830,10 @@ class HuaweiISCSIDriver(HuaweiBaseDriver, driver.ISCSIDriver):
Consistency group support
Cgsnapshot 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):
super(HuaweiISCSIDriver, self).__init__(*args, **kwargs)
@ -2029,9 +2030,10 @@ class HuaweiFCDriver(HuaweiBaseDriver, driver.FibreChannelDriver):
Consistency group support
Cgsnapshot 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):
super(HuaweiFCDriver, self).__init__(*args, **kwargs)

View File

@ -250,6 +250,9 @@ class RestClient(object):
info['ID'] = pool['ID']
info['CAPACITY'] = pool.get('DATASPACE', pool['USERFREECAPACITY'])
info['TOTALCAPACITY'] = pool['USERTOTALCAPACITY']
info['TIER0CAPACITY'] = pool['TIER0CAPACITY']
info['TIER1CAPACITY'] = pool['TIER1CAPACITY']
info['TIER2CAPACITY'] = pool['TIER2CAPACITY']
return info
@ -1021,6 +1024,22 @@ class RestClient(object):
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):
"""Get LUNcopy information."""
url = "/LUNCOPY?range=[0-1023]"
@ -1158,6 +1177,7 @@ class RestClient(object):
result = self.get_all_pools()
for pool_name in self.storage_pools:
capacity = self._get_capacity(pool_name, result)
disk_type = self._get_disk_type(pool_name, result)
pool = {}
pool.update(dict(
location_info=self.device_id,
@ -1177,6 +1197,9 @@ class RestClient(object):
hypermetro=True,
consistencygroup_support=True,
))
if disk_type:
pool['disk_type'] = disk_type
data['pools'].append(pool)
return data

View File

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