Merge "'get_volume_type_by_backendname' returns a list"
This commit is contained in:
commit
2a7e0d652c
|
@ -71,15 +71,13 @@ class CinderHelper(object):
|
|||
return self.cinder.volume_types.list()
|
||||
|
||||
def get_volume_type_by_backendname(self, backendname):
|
||||
"""Retrun a list of volume type"""
|
||||
volume_type_list = self.get_volume_type_list()
|
||||
|
||||
volume_type = [volume_type for volume_type in volume_type_list
|
||||
volume_type = [volume_type.name for volume_type in volume_type_list
|
||||
if volume_type.extra_specs.get(
|
||||
'volume_backend_name') == backendname]
|
||||
if volume_type:
|
||||
return volume_type[0].name
|
||||
else:
|
||||
return ""
|
||||
return volume_type
|
||||
|
||||
def get_volume(self, volume):
|
||||
|
||||
|
@ -204,7 +202,7 @@ class CinderHelper(object):
|
|||
volume = self.get_volume(volume)
|
||||
dest_backend = self.backendname_from_poolname(dest_node)
|
||||
dest_type = self.get_volume_type_by_backendname(dest_backend)
|
||||
if volume.volume_type != dest_type:
|
||||
if volume.volume_type not in dest_type:
|
||||
raise exception.Invalid(
|
||||
message=(_("Volume type must be same for migrating")))
|
||||
|
||||
|
|
|
@ -56,7 +56,7 @@ class StorageNode(storage_resource.StorageResource):
|
|||
"zone": wfields.StringField(),
|
||||
"status": wfields.StringField(default=ServiceState.ENABLED.value),
|
||||
"state": wfields.StringField(default=ServiceState.ONLINE.value),
|
||||
"volume_type": wfields.StringField()
|
||||
"volume_type": wfields.ListOfStringsField()
|
||||
}
|
||||
|
||||
def accept(self, visitor):
|
||||
|
|
|
@ -508,7 +508,13 @@ class StorageModelRoot(nx.DiGraph, base.Model):
|
|||
|
||||
root = etree.fromstring(data)
|
||||
for cn in root.findall('.//StorageNode'):
|
||||
node = element.StorageNode(**cn.attrib)
|
||||
ndata = {}
|
||||
for attr, val in cn.items():
|
||||
ndata[attr] = val
|
||||
volume_type = ndata.get('volume_type')
|
||||
if volume_type:
|
||||
ndata['volume_type'] = [volume_type]
|
||||
node = element.StorageNode(**ndata)
|
||||
model.add_node(node)
|
||||
|
||||
for p in root.findall('.//Pool'):
|
||||
|
|
|
@ -112,7 +112,7 @@ class TestCinderHelper(base.TestCase):
|
|||
volume_type_name = cinder_util.get_volume_type_by_backendname(
|
||||
'backend')
|
||||
|
||||
self.assertEqual(volume_type_name, volume_type1.name)
|
||||
self.assertEqual(volume_type_name[0], volume_type1.name)
|
||||
|
||||
def test_get_volume_type_by_backendname_with_no_backend_exist(
|
||||
self, mock_cinder):
|
||||
|
@ -122,7 +122,7 @@ class TestCinderHelper(base.TestCase):
|
|||
volume_type_name = cinder_util.get_volume_type_by_backendname(
|
||||
'nobackend')
|
||||
|
||||
self.assertEqual("", volume_type_name)
|
||||
self.assertEqual([], volume_type_name)
|
||||
|
||||
@staticmethod
|
||||
def fake_volume(**kwargs):
|
||||
|
|
|
@ -182,7 +182,7 @@ class FakerStorageModelCollector(base.BaseClusterDataModelCollector):
|
|||
for i in range(0, node_count):
|
||||
host = "host_{0}@backend_{0}".format(i)
|
||||
zone = "zone_{0}".format(i)
|
||||
volume_type = "type_{0}".format(i)
|
||||
volume_type = ["type_{0}".format(i)]
|
||||
node_attributes = {
|
||||
"host": host,
|
||||
"zone": zone,
|
||||
|
|
|
@ -287,8 +287,7 @@ class TestCinderNotifications(NotificationTestCase):
|
|||
side_effect=lambda name: return_node_mock)
|
||||
|
||||
m_get_volume_type_by_backendname = mock.Mock(
|
||||
side_effect=lambda name: mock.Mock('backend_2'))
|
||||
|
||||
side_effect=lambda name: [mock.Mock('backend_2')])
|
||||
m_cinder_helper.return_value = mock.Mock(
|
||||
get_storage_pool_by_name=m_get_storage_pool_by_name,
|
||||
get_storage_node_by_name=m_get_storage_node_by_name,
|
||||
|
@ -299,6 +298,7 @@ class TestCinderNotifications(NotificationTestCase):
|
|||
handler = cnotification.CapacityNotificationEndpoint(self.fake_cdmc)
|
||||
|
||||
message = self.load_message('scenario_1_capacity_node_notfound.json')
|
||||
# self.assertRaises(exception.StorageNodeNotFound, handler.info,
|
||||
handler.info(
|
||||
ctxt=self.context,
|
||||
publisher_id=message['publisher_id'],
|
||||
|
@ -448,7 +448,7 @@ class TestCinderNotifications(NotificationTestCase):
|
|||
side_effect=lambda name: return_node_mock)
|
||||
|
||||
m_get_volume_type_by_backendname = mock.Mock(
|
||||
side_effect=lambda name: mock.Mock('backend_2'))
|
||||
side_effect=lambda name: [mock.Mock('backend_2')])
|
||||
|
||||
m_cinder_helper.return_value = mock.Mock(
|
||||
get_storage_pool_by_name=m_get_storage_pool_by_name,
|
||||
|
|
|
@ -82,7 +82,7 @@ class TestStorageElement(base.TestCase):
|
|||
'zone': 'zone',
|
||||
'status': 'enabled',
|
||||
'state': 'up',
|
||||
'volume_type': 'volume_type',
|
||||
'volume_type': ['volume_type'],
|
||||
})),
|
||||
("Pool_with_all_fields", dict(
|
||||
cls=element.Pool,
|
||||
|
|
Loading…
Reference in New Issue