diff --git a/nova/api/metadata/base.py b/nova/api/metadata/base.py index bac4b7c512..e7e37788e5 100644 --- a/nova/api/metadata/base.py +++ b/nova/api/metadata/base.py @@ -330,6 +330,9 @@ class InstanceMetadata(object): if self._check_os_version(GRIZZLY, version): metadata['random_seed'] = base64.b64encode(os.urandom(512)) + if self._check_os_version(LIBERTY, version): + metadata['project_id'] = self.instance.project_id + self.set_mimetype(MIME_TYPE_APPLICATION_JSON) return jsonutils.dumps(metadata) diff --git a/nova/tests/unit/test_metadata.py b/nova/tests/unit/test_metadata.py index eece3176b1..12a9e0866f 100644 --- a/nova/tests/unit/test_metadata.py +++ b/nova/tests/unit/test_metadata.py @@ -528,6 +528,21 @@ class OpenStackMetadataTestCase(test.TestCase): mdjson = mdinst.lookup("/openstack/2012-08-10/meta_data.json") self.assertNotIn("random_seed", jsonutils.loads(mdjson)) + def test_project_id(self): + fakes.stub_out_key_pair_funcs(self.stubs) + mdinst = fake_InstanceMetadata(self.stubs, self.instance) + + # verify that 2015-10-15 has the 'project_id' field + mdjson = mdinst.lookup("/openstack/2015-10-15/meta_data.json") + mddict = jsonutils.loads(mdjson) + + self.assertIn("project_id", mddict) + self.assertEqual(mddict["project_id"], self.instance.project_id) + + # verify that older version do not have it + mdjson = mdinst.lookup("/openstack/2013-10-17/meta_data.json") + self.assertNotIn("project_id", jsonutils.loads(mdjson)) + def test_no_dashes_in_metadata(self): # top level entries in meta_data should not contain '-' in their name fakes.stub_out_key_pair_funcs(self.stubs)