summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-10-29 01:22:51 +0000
committerGerrit Code Review <review@openstack.org>2022-10-29 01:22:51 +0000
commitab9ff5725e6a0aa67d19706a983f18a4f3444cee (patch)
tree3c168b97c6ee07996478ffa6d8b2062c2cb298ed
parent6dcc2d0e6f106a8a6f0defb81835898b6fd705da (diff)
parent21244d6f832555aca0fca733a51a5025f4975629 (diff)
downloadhorizon-ab9ff5725e6a0aa67d19706a983f18a4f3444cee.tar.gz
Merge "Fix flavor specification at instance overview page" into stable/ussuri
-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 722ca8668..12d224df4 100644
--- a/openstack_dashboard/dashboards/project/instances/tests.py
+++ b/openstack_dashboard/dashboards/project/instances/tests.py
@@ -1425,6 +1425,7 @@ class InstanceDetailTests(InstanceTestBase):
"server_get",
"instance_volumes_list",
"flavor_get",
+ "flavor_list",
"extension_supported",
'is_feature_available',
),
@@ -1438,7 +1439,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:
@@ -1475,8 +1476,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 \
@@ -1662,6 +1667,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 cdc4d59b3..15c075f1d 100644
--- a/openstack_dashboard/dashboards/project/instances/views.py
+++ b/openstack_dashboard/dashboards/project/instances/views.py
@@ -519,9 +519,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,