From f2927f180aadcca0f1e19881ed7d1b5cd1e53b4c Mon Sep 17 00:00:00 2001 From: Julie Pichon Date: Wed, 16 Oct 2013 14:51:12 +0100 Subject: [PATCH] Display instances with no image information When booted from volume, instances do not have an image reference/id. Change-Id: I107c096a50c6a49e2a25c3b29b7d5c3273e4348e Closes-Bug: #1239896 --- .../dashboards/project/instances/tests.py | 39 +++++++++++++++++++ .../dashboards/project/instances/views.py | 1 + 2 files changed, 40 insertions(+) diff --git a/openstack_dashboard/dashboards/project/instances/tests.py b/openstack_dashboard/dashboards/project/instances/tests.py index f982e40249..9804787d86 100644 --- a/openstack_dashboard/dashboards/project/instances/tests.py +++ b/openstack_dashboard/dashboards/project/instances/tests.py @@ -182,6 +182,45 @@ class InstanceTests(test.TestCase): self.assertMessageCount(res, error=len(servers)) self.assertItemsEqual(instances, self.servers.list()) + @test.create_stubs({api.nova: ('flavor_list', + 'server_list', + 'tenant_absolute_limits', + 'extension_supported',), + api.glance: ('image_list_detailed',), + api.network: + ('floating_ip_simple_associate_supported',), + }) + def test_index_with_instance_booted_from_volume(self): + volume_server = self.servers.first() + volume_server.image = "" + volume_server.image_name = "(not found)" + servers = self.servers.list() + servers[0] = volume_server + + api.nova.extension_supported('AdminActions', + IsA(http.HttpRequest)) \ + .MultipleTimes().AndReturn(True) + api.nova.flavor_list(IsA(http.HttpRequest)) \ + .AndReturn(self.flavors.list()) + api.glance.image_list_detailed(IgnoreArg()) \ + .AndReturn((self.images.list(), False)) + search_opts = {'marker': None, 'paginate': True} + api.nova.server_list(IsA(http.HttpRequest), search_opts=search_opts) \ + .AndReturn([servers, False]) + api.nova.tenant_absolute_limits(IsA(http.HttpRequest), reserved=True) \ + .MultipleTimes().AndReturn(self.limits['absolute']) + api.network.floating_ip_simple_associate_supported( + IsA(http.HttpRequest)).MultipleTimes().AndReturn(True) + + self.mox.ReplayAll() + + res = self.client.get(INDEX_URL) + + self.assertTemplateUsed(res, 'project/instances/index.html') + instances = res.context['instances_table'].data + self.assertEqual(len(instances), len(servers)) + self.assertContains(res, "(not found)") + @test.create_stubs({api.nova: ('server_list', 'flavor_list', 'server_delete',), diff --git a/openstack_dashboard/dashboards/project/instances/views.py b/openstack_dashboard/dashboards/project/instances/views.py index 368882c3a3..9665604dae 100644 --- a/openstack_dashboard/dashboards/project/instances/views.py +++ b/openstack_dashboard/dashboards/project/instances/views.py @@ -89,6 +89,7 @@ class IndexView(tables.DataTableView): # Loop through instances to get flavor info. for instance in instances: if (hasattr(instance, 'image') + and hasattr(instance.image, 'id') and instance.image['id'] in image_map): instance.image = image_map[instance.image['id']]