diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-08-11 03:08:49 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-08-11 03:08:49 +0000 |
| commit | c2fd0866e2053b308180c259e412ea6b1bd39982 (patch) | |
| tree | e67b89515df7b706c39cc15b5673230b6372c54a /nova/api | |
| parent | 649d3cea2a3c6a704612087e5ccca7cbe11ae0b3 (diff) | |
| parent | d507bd9f186c45b51d635e26070aef7280b6c175 (diff) | |
Merge "Config drive v2"
Diffstat (limited to 'nova/api')
| -rw-r--r-- | nova/api/metadata/base.py | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/nova/api/metadata/base.py b/nova/api/metadata/base.py index 61bc9cad0..78ebdd821 100644 --- a/nova/api/metadata/base.py +++ b/nova/api/metadata/base.py @@ -19,6 +19,7 @@ """Instance Metadata information.""" import base64 +import json import os from nova.api.ec2 import ec2utils @@ -27,9 +28,21 @@ from nova import context from nova import db from nova import flags from nova import network +from nova.openstack.common import cfg + + +metadata_opts = [ + cfg.StrOpt('config_drive_skip_versions', + default=('1.0 2007-01-19 2007-03-01 2007-08-29 2007-10-10 ' + '2007-12-15 2008-02-01 2008-09-01'), + help=('List of metadata versions to skip placing into the ' + 'config drive')), + ] FLAGS = flags.FLAGS flags.DECLARE('dhcp_domain', 'nova.network.manager') +FLAGS.register_opts(metadata_opts) + _DEFAULT_MAPPINGS = {'ami': 'sda1', 'ephemeral0': 'sda2', @@ -205,6 +218,39 @@ class InstanceMetadata(): return data + def metadata_for_config_drive(self, injected_files): + """Yields (path, value) tuples for metadata elements.""" + # EC2 style metadata + for version in VERSIONS: + if version in FLAGS.config_drive_skip_versions.split(' '): + continue + + data = self.get_ec2_metadata(version) + if 'user-data' in data: + filepath = os.path.join('ec2', version, 'userdata.raw') + yield (filepath, data['user-data']) + del data['user-data'] + + try: + del data['public-keys']['0']['_name'] + except KeyError: + pass + + filepath = os.path.join('ec2', version, 'metadata.json') + yield (filepath, json.dumps(data['meta-data'])) + + filepath = os.path.join('ec2', 'latest', 'metadata.json') + yield (filepath, json.dumps(data['meta-data'])) + + # Openstack style metadata + # TODO(mikal): refactor this later + files = [] + for path in injected_files: + files.append({'path': path, + 'content': injected_files[path]}) + yield ('openstack/2012-08-10/files.json', json.dumps(files)) + yield ('openstack/latest/files.json', json.dumps(files)) + def get_metadata_by_address(address): ctxt = context.get_admin_context() |
