From 690202166f43281bd4439750eaec5262692454bb Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Thu, 18 Oct 2012 20:21:12 -0400 Subject: add 'random_seed' entry to instance metadata This adds a 'random_seed' entry to the openstack metadata for an instance, both in config-drive and in metadata service. It is a 512 byte blob of base64 encoded random data. In the metadata service, every call will result in new data. The intent of this field is to add some entropy to an instances entropy pool. Change-Id: I7d8c1f9bf70a9c5a54f6349f3277588553471555 --- nova/api/metadata/base.py | 3 +++ nova/tests/test_metadata.py | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/nova/api/metadata/base.py b/nova/api/metadata/base.py index 1c316bf9c..2377da7b7 100644 --- a/nova/api/metadata/base.py +++ b/nova/api/metadata/base.py @@ -317,6 +317,9 @@ class InstanceMetadata(): metadata['launch_index'] = self.instance['launch_index'] metadata['availability_zone'] = self.availability_zone + if self._check_os_version(GRIZZLY, version): + metadata['random_seed'] = base64.b64encode(os.urandom(512)) + data = { MD_JSON_NAME: json.dumps(metadata), } diff --git a/nova/tests/test_metadata.py b/nova/tests/test_metadata.py index 39c84c1d8..1f2ea4bc5 100644 --- a/nova/tests/test_metadata.py +++ b/nova/tests/test_metadata.py @@ -347,6 +347,21 @@ class OpenStackMetadataTestCase(test.TestCase): self.assertRaises(base.InvalidMetadataPath, mdinst.lookup, "/openstack/2012-08-10/user_data") + def test_random_seed(self): + inst = copy(self.instance) + mdinst = fake_InstanceMetadata(self.stubs, inst) + + # verify that 2013-04-04 has the 'random' field + mdjson = mdinst.lookup("/openstack/2013-04-04/meta_data.json") + mddict = json.loads(mdjson) + + self.assertTrue("random_seed" in mddict) + self.assertEqual(len(base64.b64decode(mddict["random_seed"])), 512) + + # verify that older version do not have it + mdjson = mdinst.lookup("/openstack/2012-08-10/meta_data.json") + self.assertFalse("random_seed" in json.loads(mdjson)) + class MetadataHandlerTestCase(test.TestCase): """Test that metadata is returning proper values.""" -- cgit