summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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