diff options
-rw-r--r-- | nova/objects/request_spec.py | 2 | ||||
-rw-r--r-- | nova/tests/unit/objects/test_request_spec.py | 35 |
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']}) |