summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-03-24 10:29:03 +0000
committerGerrit Code Review <review@openstack.org>2016-03-24 10:29:04 +0000
commit37d391c979483169f5d17efb978eb3061d7624fa (patch)
tree4169e143155908cb4df5a07a78b8555decbd3e7a
parentfdeb895c26f678c72cd820f77b7c0da7041d8b6f (diff)
parentad3c069f69ca1ab2c1d9c6c18d762b7c26c5ad92 (diff)
downloadnova-37d391c979483169f5d17efb978eb3061d7624fa.tar.gz
Merge "Try to repopulate instance_group if it is None" into stable/mitaka
-rw-r--r--nova/objects/request_spec.py2
-rw-r--r--nova/tests/unit/objects/test_request_spec.py35
2 files changed, 37 insertions, 0 deletions
diff --git a/nova/objects/request_spec.py b/nova/objects/request_spec.py
index 3c9e92288f..0a0ff944b2 100644
--- a/nova/objects/request_spec.py
+++ b/nova/objects/request_spec.py
@@ -350,6 +350,8 @@ class RequestSpec(base.NovaObject):
spec_obj.num_instances = 1
spec_obj.instance_uuid = instance_uuid
spec_obj.instance_group = instance_group
+ if spec_obj.instance_group is None and filter_properties:
+ spec_obj._populate_group_info(filter_properties)
spec_obj.project_id = context.project_id
spec_obj._image_meta_from_image(image)
spec_obj._from_flavor(flavor)
diff --git a/nova/tests/unit/objects/test_request_spec.py b/nova/tests/unit/objects/test_request_spec.py
index d68df0171f..f5fc439353 100644
--- a/nova/tests/unit/objects/test_request_spec.py
+++ b/nova/tests/unit/objects/test_request_spec.py
@@ -314,6 +314,41 @@ class _TestRequestSpecObject(object):
# just making sure that the context is set by the method
self.assertEqual(ctxt, spec._context)
+ @mock.patch('nova.objects.RequestSpec._populate_group_info')
+ def test_from_components_with_instance_group(self, mock_pgi):
+ # This test makes sure that we don't overwrite instance group passed
+ # to from_components
+ ctxt = context.RequestContext('fake-user', 'fake-project')
+ instance = fake_instance.fake_instance_obj(ctxt)
+ image = {'id': 'fake-image-id', 'properties': {'mappings': []},
+ 'status': 'fake-status', 'location': 'far-away'}
+ flavor = fake_flavor.fake_flavor_obj(ctxt)
+ filter_properties = {'fake': 'property'}
+ instance_group = objects.InstanceGroup()
+
+ objects.RequestSpec.from_components(ctxt, instance, image,
+ flavor, instance.numa_topology, instance.pci_requests,
+ filter_properties, instance_group, instance.availability_zone)
+
+ self.assertFalse(mock_pgi.called)
+
+ @mock.patch('nova.objects.RequestSpec._populate_group_info')
+ def test_from_components_without_instance_group(self, mock_pgi):
+ # This test makes sure that we populate instance group if not
+ # present
+ ctxt = context.RequestContext('fake-user', 'fake-project')
+ instance = fake_instance.fake_instance_obj(ctxt)
+ image = {'id': 'fake-image-id', 'properties': {'mappings': []},
+ 'status': 'fake-status', 'location': 'far-away'}
+ flavor = fake_flavor.fake_flavor_obj(ctxt)
+ filter_properties = {'fake': 'property'}
+
+ objects.RequestSpec.from_components(ctxt, instance, image,
+ flavor, instance.numa_topology, instance.pci_requests,
+ filter_properties, None, instance.availability_zone)
+
+ mock_pgi.assert_called_once_with(filter_properties)
+
def test_get_scheduler_hint(self):
spec_obj = objects.RequestSpec(scheduler_hints={'foo_single': ['1'],
'foo_mul': ['1', '2']})