summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Behrens <cbehrens@codestud.com>2012-06-27 17:20:49 +0000
committerChris Behrens <cbehrens@codestud.com>2012-06-27 19:25:32 +0000
commitfada5d801c699da16e8e600d474a1da94fb7f4d2 (patch)
treed88e9e55fe29a71fc86aed208a5c047b56822c26
parentb77bfdea3294c765dfda44f461aa42ee7c79a703 (diff)
downloadnova-fada5d801c699da16e8e600d474a1da94fb7f4d2.tar.gz
nova-fada5d801c699da16e8e600d474a1da94fb7f4d2.tar.xz
nova-fada5d801c699da16e8e600d474a1da94fb7f4d2.zip
Make nova list/show behave nicely on instance_type deletion
One shouldn't remove an instance_type from the DB outright... but we should make the code behave nicely in the rare case. Fixes bug 1018500 Change-Id: If742070d7982889a56709ae058cd106e3a63114b
-rw-r--r--nova/api/openstack/compute/views/servers.py7
-rw-r--r--nova/tests/api/openstack/compute/test_servers.py13
2 files changed, 19 insertions, 1 deletions
diff --git a/nova/api/openstack/compute/views/servers.py b/nova/api/openstack/compute/views/servers.py
index f14773e98..b0c2fb2b2 100644
--- a/nova/api/openstack/compute/views/servers.py
+++ b/nova/api/openstack/compute/views/servers.py
@@ -179,7 +179,12 @@ class ViewBuilder(common.ViewBuilder):
}
def _get_flavor(self, request, instance):
- flavor_id = instance["instance_type"]["flavorid"]
+ instance_type = instance["instance_type"]
+ if not instance_type:
+ LOG.warn(_("Instance has had its instance_type removed "
+ "from the DB"), instance=instance)
+ return {}
+ flavor_id = instance_type["flavorid"]
flavor_bookmark = self._flavor_builder._get_bookmark_link(request,
flavor_id,
"flavors")
diff --git a/nova/tests/api/openstack/compute/test_servers.py b/nova/tests/api/openstack/compute/test_servers.py
index 613747ce5..e1d898aeb 100644
--- a/nova/tests/api/openstack/compute/test_servers.py
+++ b/nova/tests/api/openstack/compute/test_servers.py
@@ -2849,6 +2849,19 @@ class ServersViewBuilderTest(test.TestCase):
self.view_builder = views.servers.ViewBuilder()
self.request = fakes.HTTPRequest.blank("/v2")
+ def test_get_flavor_valid_instance_type(self):
+ flavor_bookmark = "http://localhost/fake/flavors/1"
+ expected = {"id": "1",
+ "links": [{"rel": "bookmark",
+ "href": flavor_bookmark}]}
+ result = self.view_builder._get_flavor(self.request, self.instance)
+ self.assertEqual(result, expected)
+
+ def test_get_flavor_deleted_instance_type(self):
+ self.instance['instance_type'] = {}
+ result = self.view_builder._get_flavor(self.request, self.instance)
+ self.assertEqual(result, {})
+
def test_build_server(self):
self_link = "http://localhost/v2/fake/servers/%s" % self.uuid
bookmark_link = "http://localhost/fake/servers/%s" % self.uuid