diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-06-27 18:00:27 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-06-27 18:00:27 +0000 |
| commit | 1393541902a13c12e4ef910fc41e20791f05107d (patch) | |
| tree | 53c3e1b08ddd9c17e2148531c1f1a7ea5e5ee58a | |
| parent | 8e768dc5500649f12b87c8569d0d646fa4e47ed4 (diff) | |
| parent | a5130faf80d29b1a6ed80d03b2b167a54c209911 (diff) | |
Merge "metadata: cleanup pubkey representation"
| -rw-r--r-- | nova/api/metadata/base.py | 20 | ||||
| -rw-r--r-- | nova/tests/test_metadata.py | 10 |
2 files changed, 25 insertions, 5 deletions
diff --git a/nova/api/metadata/base.py b/nova/api/metadata/base.py index 3f7db817d..1b0ac441b 100644 --- a/nova/api/metadata/base.py +++ b/nova/api/metadata/base.py @@ -136,10 +136,18 @@ class InstanceMetadata(): if self.userdata_b64 is not None: data['user-data'] = self.userdata_b64 - # public-keys should be in meta-data only if user specified one + # public keys are strangely rendered in ec2 metadata service + # meta-data/public-keys/ returns '0=keyname' (with no trailing /) + # and only if there is a public key given. + # '0=keyname' means there is a normally rendered dict at + # meta-data/public-keys/0 + # + # meta-data/public-keys/ : '0=%s' % keyname + # meta-data/public-keys/0/ : 'openssh-key' + # meta-data/public-keys/0/openssh-key : '%s' % publickey if self.instance['key_name']: data['meta-data']['public-keys'] = { - '0': {'_name': self.instance['key_name'], + '0': {'_name': "0=" + self.instance['key_name'], 'openssh-key': self.instance['key_data']}} if False: # TODO(vish): store ancestor ids @@ -241,12 +249,14 @@ def ec2_md_print(data): for key in sorted(data.keys()): if key == '_name': continue - output += key if isinstance(data[key], dict): if '_name' in data[key]: - output += '=' + str(data[key]['_name']) + output += str(data[key]['_name']) else: - output += '/' + output += key + '/' + else: + output += key + output += '\n' return output[:-1] elif isinstance(data, list): diff --git a/nova/tests/test_metadata.py b/nova/tests/test_metadata.py index 1d2cc37aa..0c3c5b574 100644 --- a/nova/tests/test_metadata.py +++ b/nova/tests/test_metadata.py @@ -180,6 +180,16 @@ class MetadataTestCase(test.TestCase): self.assertEqual(base._format_instance_mapping(ctxt, instance_ref1), expected) + def test_pubkey(self): + md = fake_InstanceMetadata(self.stubs, copy(self.instance)) + data = md.get_ec2_metadata(version='2009-04-04') + pubkey_ent = data['meta-data']['public-keys'] + + self.assertEqual(base.ec2_md_print(pubkey_ent), + "0=%s" % self.instance['key_name']) + self.assertEqual(base.ec2_md_print(pubkey_ent['0']['openssh-key']), + self.instance['key_data']) + class MetadataHandlerTestCase(test.TestCase): """Test that metadata is returning proper values.""" |
