summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Rykowski <kamil.rykowski@intel.com>2015-03-30 14:16:57 +0200
committerKamil Rykowski <kamil.rykowski@intel.com>2015-03-30 14:16:57 +0200
commit374d50a56e2c6883798ddb4391ba52eb004adddd (patch)
tree985ef4948f6bb788f4adae4774d5ef9b426bfe66
parent02cbb2a17dd25d89102b06c53eefa79540aaae78 (diff)
downloadglance-374d50a56e2c6883798ddb4391ba52eb004adddd.tar.gz
Creating metadef object without any properties
Creating a metadef object without any properties associated with it raises an Internal Server Error. It is easily reproducible by running following glanceclient command: glance --os-image-api-version 2 md-object-create --name obj_name --schema '{"description": "some desc"}' OS::Software::DBMS The metadef object itself is created successfully, but the notification is not fired and the response has code 500. Proposed patch fixes it by making sure that notification system won't iterate over None value. Change-Id: I591801d80d9cb2738dc3d27d7719fcc53a3d0645 Closes-Bug: 1438154
-rw-r--r--glance/notifier.py3
-rwxr-xr-xglance/tests/unit/v2/test_metadef_resources.py21
2 files changed, 22 insertions, 2 deletions
diff --git a/glance/notifier.py b/glance/notifier.py
index 457580a93..8cf19a88a 100644
--- a/glance/notifier.py
+++ b/glance/notifier.py
@@ -166,8 +166,9 @@ def format_metadef_namespace_notification(metadef_namespace):
def format_metadef_object_notification(metadef_object):
+ object_properties = metadef_object.properties or {}
properties = []
- for name, prop in six.iteritems(metadef_object.properties):
+ for name, prop in six.iteritems(object_properties):
object_property = _format_metadef_object_property(name, prop)
properties.append(object_property)
diff --git a/glance/tests/unit/v2/test_metadef_resources.py b/glance/tests/unit/v2/test_metadef_resources.py
index 90a4ca6a8..e45bc0aa2 100755
--- a/glance/tests/unit/v2/test_metadef_resources.py
+++ b/glance/tests/unit/v2/test_metadef_resources.py
@@ -1250,7 +1250,8 @@ class TestMetadefsControllers(base.IsolatedUnitTest):
self.assertEqual({}, object.properties)
self.assertNotificationLog("metadef_object.create",
[{'name': OBJECT2,
- 'namespace': NAMESPACE1}])
+ 'namespace': NAMESPACE1,
+ 'properties': []}])
object = self.object_controller.show(request, NAMESPACE1, OBJECT2)
self.assertEqual(OBJECT2, object.name)
self.assertEqual([], object.required)
@@ -1315,6 +1316,24 @@ class TestMetadefsControllers(base.IsolatedUnitTest):
self.assertEqual([], object.required)
self.assertEqual({}, object.properties)
+ def test_object_create_missing_properties(self):
+ request = unit_test_utils.get_fake_request()
+
+ object = glance.api.v2.model.metadef_object.MetadefObject()
+ object.name = OBJECT2
+ object.required = []
+ object = self.object_controller.create(request, object, NAMESPACE1)
+ self.assertEqual(OBJECT2, object.name)
+ self.assertEqual([], object.required)
+ self.assertNotificationLog("metadef_object.create",
+ [{'name': OBJECT2,
+ 'namespace': NAMESPACE1,
+ 'properties': []}])
+ object = self.object_controller.show(request, NAMESPACE1, OBJECT2)
+ self.assertEqual(OBJECT2, object.name)
+ self.assertEqual([], object.required)
+ self.assertEqual({}, object.properties)
+
def test_object_update(self):
request = unit_test_utils.get_fake_request(tenant=TENANT3)