summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-10-11 15:29:38 +0000
committerGerrit Code Review <review@openstack.org>2022-10-11 15:29:38 +0000
commit422247d18d7c12462e764a5b12d7cdd243cb10cc (patch)
treeb15b2b8da81df4e0000cd3328c04d780d048207b
parent34717d905f1e7bde0518deca23b8db7958cfdabe (diff)
parent6e8788580e8a9fa7a305de0322a81ed930c04246 (diff)
downloadhorizon-422247d18d7c12462e764a5b12d7cdd243cb10cc.tar.gz
Merge "Fix flavor specification at instance overview page" into stable/zed
-rw-r--r--openstack_dashboard/dashboards/project/instances/tests.py24
-rw-r--r--openstack_dashboard/dashboards/project/instances/views.py11
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,