diff options
| author | Devananda van der Veen <devananda.vdv@gmail.com> | 2012-11-14 11:25:14 -0800 |
|---|---|---|
| committer | Devananda van der Veen <devananda.vdv@gmail.com> | 2012-11-16 11:26:17 -0800 |
| commit | e32f01ac93c96395aec14b520ac6792d811f1c03 (patch) | |
| tree | d713bcb356ff00a35428cd9442cdea0986a683c1 /nova | |
| parent | 40d7bcb8a3b797cfa691d83d8694a3c9c81ad8dc (diff) | |
| download | nova-e32f01ac93c96395aec14b520ac6792d811f1c03.tar.gz nova-e32f01ac93c96395aec14b520ac6792d811f1c03.tar.xz nova-e32f01ac93c96395aec14b520ac6792d811f1c03.zip | |
add instance_type_extra_specs to instances
Adding instance_type_extra_specs as instance['extra_specs']
so that this info is passed to driver.spawn() later on.
This is needed by the baremetal driver.
Change-Id: Icbfba835c9a060193597cc00a7c0e404b7ccfdd4
Diffstat (limited to 'nova')
| -rw-r--r-- | nova/db/sqlalchemy/api.py | 12 | ||||
| -rw-r--r-- | nova/tests/compute/test_compute.py | 1 | ||||
| -rw-r--r-- | nova/tests/test_db_api.py | 35 |
3 files changed, 48 insertions, 0 deletions
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index eb1247e7d..40e0445bd 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -1807,6 +1807,18 @@ def _instance_update(context, instance_uuid, values, copy_old_instance=False): with session.begin(): instance_ref = instance_get_by_uuid(context, instance_uuid, session=session) + # TODO(deva): remove extra_specs from here after it is included + # in system_metadata. Until then, the baremetal driver + # needs extra_specs added to instance[] + inst_type_ref = _instance_type_get_query(context, session=session).\ + filter_by(id=instance_ref['instance_type_id']).\ + first() + if inst_type_ref: + instance_ref['extra_specs'] = \ + _dict_with_extra_specs(inst_type_ref).get('extra_specs', {}) + else: + instance_ref['extra_specs'] = {} + if "expected_task_state" in values: # it is not a db column so always pop out expected = values.pop("expected_task_state") diff --git a/nova/tests/compute/test_compute.py b/nova/tests/compute/test_compute.py index 451fc3d87..9465816ed 100644 --- a/nova/tests/compute/test_compute.py +++ b/nova/tests/compute/test_compute.py @@ -3980,6 +3980,7 @@ class ComputeAPITestCase(BaseTestCase): instance = self._create_fake_instance(dict(host='host2')) instance = db.instance_get_by_uuid(self.context, instance['uuid']) instance = jsonutils.to_primitive(instance) + instance['instance_type']['extra_specs'] = [] orig_instance_type = instance['instance_type'] self.compute.run_instance(self.context, instance=instance) # We need to set the host to something 'known'. Unfortunately, diff --git a/nova/tests/test_db_api.py b/nova/tests/test_db_api.py index 92eae023a..0b0fed805 100644 --- a/nova/tests/test_db_api.py +++ b/nova/tests/test_db_api.py @@ -304,6 +304,41 @@ class DbApiTestCase(test.TestCase): self.assertEquals("building", old_ref["vm_state"]) self.assertEquals("needscoffee", new_ref["vm_state"]) + def test_instance_update_with_extra_specs(self): + """Ensure _extra_specs are returned from _instance_update""" + ctxt = context.get_admin_context() + + # create a flavor + inst_type_dict = dict( + name="test_flavor", + memory_mb=1, + vcpus=1, + root_gb=1, + ephemeral_gb=1, + flavorid=105) + inst_type_ref = db.instance_type_create(ctxt, inst_type_dict) + + # add some extra spec to our flavor + spec = {'test_spec': 'foo'} + db.instance_type_extra_specs_update_or_create( + ctxt, + inst_type_ref['flavorid'], + spec) + + # create instance, just populates db, doesn't pull extra_spec + instance = db.instance_create( + ctxt, + {'instance_type_id': inst_type_ref['id']}) + self.assertNotIn('extra_specs', instance) + + # update instance, used when starting instance to set state, etc + (old_ref, new_ref) = db.instance_update_and_get_original( + ctxt, + instance['uuid'], + {}) + self.assertEquals(spec, old_ref['extra_specs']) + self.assertEquals(spec, new_ref['extra_specs']) + def test_instance_fault_create(self): """Ensure we can create an instance fault""" ctxt = context.get_admin_context() |
