diff options
-rw-r--r-- | openstack_dashboard/dashboards/project/instances/tests.py | 24 | ||||
-rw-r--r-- | openstack_dashboard/dashboards/project/instances/views.py | 11 |
2 files changed, 30 insertions, 5 deletions
diff --git a/openstack_dashboard/dashboards/project/instances/tests.py b/openstack_dashboard/dashboards/project/instances/tests.py index 12ac3fcf9..93151a410 100644 --- a/openstack_dashboard/dashboards/project/instances/tests.py +++ b/openstack_dashboard/dashboards/project/instances/tests.py @@ -1325,6 +1325,7 @@ class InstanceDetailTests(InstanceTestBase): "server_get", "instance_volumes_list", "flavor_get", + "flavor_list", 'is_feature_available', ), api.neutron: ( @@ -1337,7 +1338,7 @@ class InstanceDetailTests(InstanceTestBase): def _get_instance_details(self, server, qs=None, flavor_return=None, volumes_return=None, security_groups_return=None, - flavor_exception=False): + flavor_exception=False, nova_api_ge_2_47=False): url = reverse('horizon:project:instances:detail', args=[server.id]) if qs: @@ -1372,8 +1373,12 @@ class InstanceDetailTests(InstanceTestBase): helpers.IsHttpRequest(), mock.ANY) self.mock_instance_volumes_list.assert_called_once_with( helpers.IsHttpRequest(), server.id) - self.mock_flavor_get.assert_called_once_with( - helpers.IsHttpRequest(), server.flavor['id']) + if nova_api_ge_2_47: + self.mock_flavor_list.assert_called_once_with( + helpers.IsHttpRequest()) + else: + self.mock_flavor_get.assert_called_once_with( + helpers.IsHttpRequest(), server.flavor['id']) self.mock_server_security_groups.assert_called_once_with( helpers.IsHttpRequest(), server.id) self.mock_floating_ip_simple_associate_supported \ @@ -1557,6 +1562,19 @@ class InstanceDetailTests(InstanceTestBase): self.mock_is_extension_supported.assert_called_once_with( helpers.IsHttpRequest(), 'mac-learning') + @helpers.create_mocks({api.neutron: ['is_extension_supported']}) + def test_instance_details_nova_api_ge_2_47(self): + server = self.servers.first() + server.flavor = { + 'original_name': 'm1.tiny', + } + self.mock_is_extension_supported.return_value = False + res = self._get_instance_details(server, nova_api_ge_2_47=True) + self.assertTemplateUsed(res, + 'project/instances/_detail_overview.html') + self.mock_is_extension_supported.assert_called_once_with( + helpers.IsHttpRequest(), 'mac-learning') + @helpers.create_mocks({api.nova: ['server_console_output'], api.neutron: ['is_extension_supported']}) def test_instance_log(self): diff --git a/openstack_dashboard/dashboards/project/instances/views.py b/openstack_dashboard/dashboards/project/instances/views.py index bbd8e2828..c1c3ae432 100644 --- a/openstack_dashboard/dashboards/project/instances/views.py +++ b/openstack_dashboard/dashboards/project/instances/views.py @@ -506,9 +506,16 @@ class DetailView(tabs.TabView): def _get_flavor(self, instance): instance_id = instance.id + flavor_id = instance.flavor.get('id') try: - instance.full_flavor = api.nova.flavor_get( - self.request, instance.flavor["id"]) + if flavor_id: # Nova API <= 2.46 + instance.full_flavor = api.nova.flavor_get( + self.request, flavor_id) + else: + flavors = api.nova.flavor_list(self.request) + flavor_name_dict = dict((str(f.name), f) for f in flavors) + instance.full_flavor = \ + flavor_name_dict[instance.flavor['original_name']] except Exception: msg = _('Unable to retrieve flavor information for instance ' '"%(name)s" (%(id)s).') % {'name': instance.name, |