Add name property to protectable instances model
Change-Id: I98f47a1aec2994a040a9ffa0c4fed251a99426c5
This commit is contained in:
parent
4a19ec75a9
commit
cb46d5496a
|
@ -74,6 +74,7 @@ class ProtectableViewBuilder(common.ViewBuilder):
|
|||
'instance': {
|
||||
'id': instance.get('id'),
|
||||
'type': instance.get('type'),
|
||||
'name': instance.get('name'),
|
||||
'dependent_resources': instance.get('dependent_resources'),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,4 +12,4 @@
|
|||
|
||||
from collections import namedtuple
|
||||
|
||||
Resource = namedtuple("Resource", ('type', 'id'))
|
||||
Resource = namedtuple("Resource", ('type', 'id', 'name'))
|
||||
|
|
|
@ -223,7 +223,7 @@ class ProtectionManager(manager.Manager):
|
|||
|
||||
result = []
|
||||
for resource in resource_instances:
|
||||
result.append(dict(id=resource.id))
|
||||
result.append(dict(id=resource.id, name=resource.name))
|
||||
|
||||
return result
|
||||
|
||||
|
@ -235,7 +235,8 @@ class ProtectionManager(manager.Manager):
|
|||
{'type': protectable_type,
|
||||
'id': protectable_id})
|
||||
|
||||
parent_resource = Resource(type=protectable_type, id=protectable_id)
|
||||
parent_resource = Resource(type=protectable_type, id=protectable_id,
|
||||
name="")
|
||||
|
||||
try:
|
||||
dependent_resources = \
|
||||
|
@ -250,7 +251,8 @@ class ProtectionManager(manager.Manager):
|
|||
|
||||
result = []
|
||||
for resource in dependent_resources:
|
||||
result.append(dict(type=resource.type, id=resource.id))
|
||||
result.append(dict(type=resource.type, id=resource.id,
|
||||
name=resource.name))
|
||||
|
||||
return result
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@ class ImageProtectablePlugin(protectable_plugin.ProtectablePlugin):
|
|||
reason=six.text_type(e))
|
||||
else:
|
||||
return [resource.Resource(type=self._SUPPORT_RESOURCE_TYPE,
|
||||
id=image.id)
|
||||
id=image.id, name=image.name)
|
||||
for image in images]
|
||||
|
||||
def _get_dependent_resources_by_server(self, parent_resource):
|
||||
|
@ -71,7 +71,8 @@ class ImageProtectablePlugin(protectable_plugin.ProtectablePlugin):
|
|||
reason=six.text_type(e))
|
||||
else:
|
||||
return [resource.Resource(type=self._SUPPORT_RESOURCE_TYPE,
|
||||
id=server.image['id'])]
|
||||
id=server.image['id'],
|
||||
name=server.image['name'])]
|
||||
|
||||
def _get_dependent_resources_by_project(self, parent_resource):
|
||||
try:
|
||||
|
@ -83,7 +84,8 @@ class ImageProtectablePlugin(protectable_plugin.ProtectablePlugin):
|
|||
reason=six.text_type(e))
|
||||
else:
|
||||
return [resource.Resource(type=self._SUPPORT_RESOURCE_TYPE,
|
||||
id=image.id)
|
||||
id=image.id,
|
||||
name=image.name)
|
||||
for image in images
|
||||
if image.owner == parent_resource.id]
|
||||
|
||||
|
|
|
@ -55,7 +55,8 @@ class ServerProtectablePlugin(protectable_plugin.ProtectablePlugin):
|
|||
reason=six.text_type(e))
|
||||
else:
|
||||
return [resource.Resource(type=self._SUPPORT_RESOURCE_TYPE,
|
||||
id=server.id)
|
||||
id=server.id,
|
||||
name=server.name)
|
||||
for server in servers]
|
||||
|
||||
def get_dependent_resources(self, parent_resource):
|
||||
|
|
|
@ -57,7 +57,7 @@ class VolumeProtectablePlugin(protectable_plugin.ProtectablePlugin):
|
|||
reason=six.text_type(e))
|
||||
else:
|
||||
return [resource.Resource(type=self._SUPPORT_RESOURCE_TYPE,
|
||||
id=vol.id)
|
||||
id=vol.id, name=vol.name)
|
||||
for vol in volumes]
|
||||
|
||||
def get_dependent_resources(self, parent_resource):
|
||||
|
@ -79,5 +79,5 @@ class VolumeProtectablePlugin(protectable_plugin.ProtectablePlugin):
|
|||
reason=six.text_type(e))
|
||||
else:
|
||||
return [resource.Resource(type=self._SUPPORT_RESOURCE_TYPE,
|
||||
id=vol.id)
|
||||
id=vol.id, name=vol.name)
|
||||
for vol in volumes if _is_attached_to(vol)]
|
||||
|
|
|
@ -23,9 +23,11 @@ from smaug.tests import base
|
|||
|
||||
CONF = cfg.CONF
|
||||
|
||||
image_info = namedtuple('image_info', field_names=['id', 'owner'])
|
||||
server_info = namedtuple('server_info', field_names=['id', 'type', 'image'])
|
||||
project_info = namedtuple('project_info', field_names=['id', 'type'])
|
||||
|
||||
image_info = namedtuple('image_info', field_names=['id', 'owner', 'name'])
|
||||
server_info = namedtuple('server_info', field_names=['id', 'type', 'name',
|
||||
'image'])
|
||||
project_info = namedtuple('project_info', field_names=['id', 'type', 'name'])
|
||||
|
||||
|
||||
class ImageProtectablePluginTest(base.TestCase):
|
||||
|
@ -79,33 +81,36 @@ class ImageProtectablePluginTest(base.TestCase):
|
|||
def test_list_resources(self):
|
||||
plugin = ImageProtectablePlugin(self._context)
|
||||
plugin._glance_client.images.list = mock.MagicMock(return_value=[
|
||||
image_info('123', 'abcd'),
|
||||
image_info('456', 'efgh'),
|
||||
image_info(id='123', name='name123', owner='abcd'),
|
||||
image_info(id='456', name='name456', owner='efgh'),
|
||||
])
|
||||
self.assertEqual(plugin.list_resources(),
|
||||
[resource.Resource(type=constants.IMAGE_RESOURCE_TYPE,
|
||||
id='123'),
|
||||
id='123', name='name123'),
|
||||
resource.Resource(type=constants.IMAGE_RESOURCE_TYPE,
|
||||
id='456')
|
||||
id='456', name='name456')
|
||||
])
|
||||
|
||||
def test_get_server_dependent_resources(self):
|
||||
vm = server_info(id='server1',
|
||||
type=constants.SERVER_RESOURCE_TYPE,
|
||||
image=dict(id='123'))
|
||||
name='nameserver1',
|
||||
image=dict(id='123', name='name123'))
|
||||
plugin = ImageProtectablePlugin(self._context)
|
||||
plugin._nova_client.servers.get = mock.MagicMock(return_value=vm)
|
||||
self.assertEqual(plugin.get_dependent_resources(vm),
|
||||
[resource.Resource(type=constants.IMAGE_RESOURCE_TYPE,
|
||||
id='123')])
|
||||
id='123', name='name123')])
|
||||
|
||||
def test_get_project_dependent_resources(self):
|
||||
project = project_info(id='abcd', type=constants.PROJECT_RESOURCE_TYPE)
|
||||
project = project_info(id='abcd', type=constants.PROJECT_RESOURCE_TYPE,
|
||||
name='nameabcd')
|
||||
plugin = ImageProtectablePlugin(self._context)
|
||||
plugin._glance_client.images.list = mock.MagicMock(return_value=[
|
||||
image_info('123', 'abcd'),
|
||||
image_info('456', 'efgh'),
|
||||
image_info('123', 'abcd', 'nameabcd'),
|
||||
image_info('456', 'efgh', 'nameefgh'),
|
||||
])
|
||||
self.assertEqual(plugin.get_dependent_resources(project),
|
||||
[resource.Resource(type=constants.IMAGE_RESOURCE_TYPE,
|
||||
name='nameabcd',
|
||||
id='123')])
|
||||
|
|
|
@ -63,20 +63,22 @@ class ServerProtectablePluginTest(base.TestCase):
|
|||
plugin = ServerProtectablePlugin(self._context)
|
||||
plugin._client.servers.list = mock.MagicMock()
|
||||
|
||||
server_info = collections.namedtuple('server_info', ['id'])
|
||||
plugin._client.servers.list.return_value = [server_info('123'),
|
||||
server_info('456')]
|
||||
self.assertEqual([Resource('OS::Nova::Server', '123'),
|
||||
Resource('OS::Nova::Server', '456')],
|
||||
server_info = collections.namedtuple('server_info', ['id', 'name'])
|
||||
plugin._client.servers.list.return_value = [
|
||||
server_info(id='123', name='name123'),
|
||||
server_info(id='456', name='name456')]
|
||||
self.assertEqual([Resource('OS::Nova::Server', '123', 'name123'),
|
||||
Resource('OS::Nova::Server', '456', 'name456')],
|
||||
plugin.list_resources())
|
||||
|
||||
def test_get_dependent_resources(self):
|
||||
plugin = ServerProtectablePlugin(self._context)
|
||||
plugin._client.servers.list = mock.MagicMock()
|
||||
|
||||
server_info = collections.namedtuple('server_info', ['id'])
|
||||
plugin._client.servers.list.return_value = [server_info('123'),
|
||||
server_info('456')]
|
||||
self.assertEqual([Resource('OS::Nova::Server', '123'),
|
||||
Resource('OS::Nova::Server', '456')],
|
||||
server_info = collections.namedtuple('server_info', ['id', 'name'])
|
||||
plugin._client.servers.list.return_value = [
|
||||
server_info(id='123', name='name123'),
|
||||
server_info(id='456', name='name456')]
|
||||
self.assertEqual([Resource('OS::Nova::Server', '123', 'name123'),
|
||||
Resource('OS::Nova::Server', '456', 'name456')],
|
||||
plugin.get_dependent_resources(None))
|
||||
|
|
|
@ -22,8 +22,8 @@ from smaug.services.protection.protectable_plugins.volume \
|
|||
|
||||
from smaug.tests import base
|
||||
|
||||
project_info = namedtuple('project_info', field_names=['id', 'type'])
|
||||
vol_info = namedtuple('vol_info', ['id', 'attachments'])
|
||||
project_info = namedtuple('project_info', field_names=['id', 'type', 'name'])
|
||||
vol_info = namedtuple('vol_info', ['id', 'attachments', 'name'])
|
||||
|
||||
|
||||
class VolumeProtectablePluginTest(base.TestCase):
|
||||
|
@ -67,28 +67,31 @@ class VolumeProtectablePluginTest(base.TestCase):
|
|||
plugin = VolumeProtectablePlugin(self._context)
|
||||
plugin._client.volumes.list = mock.MagicMock()
|
||||
|
||||
plugin._client.volumes.list.return_value = [vol_info('123', []),
|
||||
vol_info('456', [])]
|
||||
self.assertEqual([Resource('OS::Cinder::Volume', '123'),
|
||||
Resource('OS::Cinder::Volume', '456')],
|
||||
plugin._client.volumes.list.return_value = [vol_info('123', [],
|
||||
'name123'),
|
||||
vol_info('456', [],
|
||||
'name456')]
|
||||
self.assertEqual([Resource('OS::Cinder::Volume', '123', 'name123'),
|
||||
Resource('OS::Cinder::Volume', '456', 'name456')],
|
||||
plugin.list_resources())
|
||||
|
||||
def test_get_server_dependent_resources(self):
|
||||
plugin = VolumeProtectablePlugin(self._context)
|
||||
plugin._client.volumes.list = mock.MagicMock()
|
||||
|
||||
attached = [{'server_id': 'abcdef'}]
|
||||
attached = [{'server_id': 'abcdef', 'name': 'name'}]
|
||||
plugin._client.volumes.list.return_value = [
|
||||
vol_info('123', attached),
|
||||
vol_info('456', []),
|
||||
vol_info('123', attached, 'name123'),
|
||||
vol_info('456', [], 'name456'),
|
||||
]
|
||||
self.assertEqual([Resource('OS::Cinder::Volume', '123')],
|
||||
self.assertEqual([Resource('OS::Cinder::Volume', '123', 'name123')],
|
||||
plugin.get_dependent_resources(Resource(
|
||||
"OS::Nova::Server", 'abcdef'
|
||||
"OS::Nova::Server", 'abcdef', 'name'
|
||||
)))
|
||||
|
||||
def test_get_project_dependent_resources(self):
|
||||
project = project_info('abcd', constants.PROJECT_RESOURCE_TYPE)
|
||||
project = project_info('abcd', constants.PROJECT_RESOURCE_TYPE,
|
||||
'nameabcd')
|
||||
plugin = VolumeProtectablePlugin(self._context)
|
||||
plugin._client.volumes.list = mock.MagicMock()
|
||||
|
||||
|
@ -98,7 +101,9 @@ class VolumeProtectablePluginTest(base.TestCase):
|
|||
]
|
||||
setattr(volumes[0], 'os-vol-tenant-attr:tenant_id', 'abcd')
|
||||
setattr(volumes[1], 'os-vol-tenant-attr:tenant_id', 'efgh')
|
||||
setattr(volumes[0], 'name', 'name123')
|
||||
setattr(volumes[1], 'name', 'name456')
|
||||
|
||||
plugin._client.volumes.list.return_value = volumes
|
||||
self.assertEqual(plugin.get_dependent_resources(project),
|
||||
[Resource('OS::Cinder::Volume', '123')])
|
||||
[Resource('OS::Cinder::Volume', '123', 'name123')])
|
||||
|
|
|
@ -61,27 +61,32 @@ class ProtectionServiceTest(base.TestCase):
|
|||
'list_resources')
|
||||
def test_list_protectable_instances(self, mocker):
|
||||
mocker.return_value = [Resource(type='OS::Nova::Server',
|
||||
id='123456'),
|
||||
id='123456',
|
||||
name='name123'),
|
||||
Resource(type='OS::Nova::Server',
|
||||
id='654321')]
|
||||
id='654321',
|
||||
name='name654')]
|
||||
fake_cntx = mock.MagicMock()
|
||||
|
||||
result = self.pro_manager.list_protectable_instances(
|
||||
fake_cntx, 'OS::Nova::Server')
|
||||
self.assertEqual([{'id': '123456'},
|
||||
{'id': '654321'}], result)
|
||||
self.assertEqual([{'id': '123456', 'name': 'name123'},
|
||||
{'id': '654321', 'name': 'name654'}],
|
||||
result)
|
||||
|
||||
@mock.patch.object(protectable_registry.ProtectableRegistry,
|
||||
'fetch_dependent_resources')
|
||||
def test_list_protectable_dependents(self, mocker):
|
||||
mocker.return_value = [Resource(type='OS::Cinder::Volume',
|
||||
id='123456'),
|
||||
id='123456', name='name123'),
|
||||
Resource(type='OS::Cinder::Volume',
|
||||
id='654321')]
|
||||
id='654321', name='name654')]
|
||||
fake_cntx = mock.MagicMock()
|
||||
|
||||
result = self.pro_manager.list_protectable_dependents(
|
||||
fake_cntx, 'fake_id', 'OS::Nova::Server')
|
||||
self.assertEqual([{'type': 'OS::Cinder::Volume', 'id': '123456'},
|
||||
{'type': 'OS::Cinder::Volume', 'id': '654321'}],
|
||||
self.assertEqual([{'type': 'OS::Cinder::Volume', 'id': '123456',
|
||||
'name': 'name123'},
|
||||
{'type': 'OS::Cinder::Volume', 'id': '654321',
|
||||
'name': 'name654'}],
|
||||
result)
|
||||
|
|
|
@ -50,9 +50,9 @@ class ProtectableRegistryTest(base.TestCase):
|
|||
self.protectable_registry.register_plugin(self._fake_plugin)
|
||||
|
||||
def test_graph_building(self):
|
||||
A = Resource(_FAKE_TYPE, "A")
|
||||
B = Resource(_FAKE_TYPE, "B")
|
||||
C = Resource(_FAKE_TYPE, "C")
|
||||
A = Resource(_FAKE_TYPE, "A", 'nameA')
|
||||
B = Resource(_FAKE_TYPE, "B", 'nameB')
|
||||
C = Resource(_FAKE_TYPE, "C", 'nameC')
|
||||
test_matrix = (
|
||||
(
|
||||
{A: [B],
|
||||
|
|
Loading…
Reference in New Issue