summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-07-18 10:36:15 +0000
committerGerrit Code Review <review@openstack.org>2012-07-18 10:36:15 +0000
commit7ddb690a62300abf9598049f54a8cf8cf13c97d7 (patch)
treefe92c5ead867db844d2ad1c00e8ccdcd8fc3280b /nova/api
parent5e463632209c5528b1af7f8be247d41a44a29f32 (diff)
parent29b1b4c79360e550cc89a9736dee56576aa5b972 (diff)
Merge "Make metadata content match the requested version of the metadata API."
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/metadata/base.py71
1 files changed, 46 insertions, 25 deletions
diff --git a/nova/api/metadata/base.py b/nova/api/metadata/base.py
index ee6e28208..4ecf64649 100644
--- a/nova/api/metadata/base.py
+++ b/nova/api/metadata/base.py
@@ -115,27 +115,16 @@ class InstanceMetadata():
floating_ip = floating_ips and floating_ips[0] or ''
fmt_sgroups = [x['name'] for x in self.security_groups]
- data = {
- 'meta-data': {
- 'ami-launch-index': self.instance['launch_index'],
- 'ami-manifest-path': 'FIXME',
- 'block-device-mapping': self.mappings,
- 'hostname': hostname,
- 'instance-action': 'none',
- 'instance-type': self.instance['instance_type']['name'],
- 'local-hostname': hostname,
- 'local-ipv4': self.address,
- 'placement': {'availability-zone': self.availability_zone},
- 'public-hostname': hostname,
- 'public-ipv4': floating_ip,
- 'reservation-id': self.instance['reservation_id'],
- 'security-groups': fmt_sgroups}}
-
- for key in self.ec2_ids:
- data['meta-data'][key] = self.ec2_ids[key]
- if self.userdata_b64 is not None:
- data['user-data'] = self.userdata_b64
+ meta_data = {
+ 'ami-id': self.ec2_ids['ami-id'],
+ 'ami-launch-index': self.instance['launch_index'],
+ 'ami-manifest-path': 'FIXME',
+ 'instance-id': self.ec2_ids['instance-id'],
+ 'hostname': hostname,
+ 'local-ipv4': self.address,
+ 'reservation-id': self.instance['reservation_id'],
+ 'security-groups': fmt_sgroups}
# public keys are strangely rendered in ec2 metadata service
# meta-data/public-keys/ returns '0=keyname' (with no trailing /)
@@ -147,17 +136,49 @@ class InstanceMetadata():
# 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'] = {
+ meta_data['public-keys'] = {
'0': {'_name': "0=" + self.instance['key_name'],
'openssh-key': self.instance['key_data']}}
- if False: # TODO(vish): store ancestor ids
- data['ancestor-ami-ids'] = []
- if False: # TODO(vish): store product codes
- data['product-codes'] = []
+ if self._check_version('2007-01-19', version):
+ meta_data['local-hostname'] = hostname
+ meta_data['public-hostname'] = hostname
+ meta_data['public-ipv4'] = floating_ip
+
+ if False and self._check_version('2007-03-01', version):
+ # TODO(vish): store product codes
+ meta_data['product-codes'] = []
+
+ if self._check_version('2007-08-29', version):
+ meta_data['instance-type'] = self.instance['instance_type']['name']
+
+ if False and self._check_version('2007-10-10', version):
+ # TODO(vish): store ancestor ids
+ meta_data['ancestor-ami-ids'] = []
+
+ if self._check_version('2007-12-15', version):
+ meta_data['block-device-mapping'] = self.mappings
+ if 'kernel-id' in self.ec2_ids:
+ meta_data['kernel-id'] = self.ec2_ids['kernel-id']
+ if 'ramdisk-id' in self.ec2_ids:
+ meta_data['ramdisk-id'] = self.ec2_ids['ramdisk-id']
+
+ if self._check_version('2008-02-01', version):
+ meta_data['placement'] = {'availability-zone':
+ self.availability_zone}
+
+ if self._check_version('2008-09-01', version):
+ meta_data['instance-action'] = 'none'
+
+ data = {'meta-data': meta_data}
+ if self.userdata_b64 is not None:
+ data['user-data'] = self.userdata_b64
return data
+ def _check_version(self, required, requested):
+ return VERSIONS.index(requested) >= VERSIONS.index(required)
+
def lookup(self, path):
if path == "" or path[0] != "/":
path = os.path.normpath("/" + path)