diff options
author | Roman Podolyaka <rpodolyaka@mirantis.com> | 2013-10-11 17:54:09 +0300 |
---|---|---|
committer | Roman Podolyaka <rpodolyaka@mirantis.com> | 2013-10-14 15:30:24 +0300 |
commit | fcbead3871c995f4da423c9fffe9ed444407a5ce (patch) | |
tree | 0b6a1222459f541a5ac6671831bd07f7db52ff46 | |
parent | 8e36320284dc2cce39a521d1723082dd75f94f39 (diff) |
Make LaunchConfiguration resources mergeable
This can be very useful for merging of Metadata to be used
by optional services (e. g. to add services like tuskar to
undercloud on demand).
Change-Id: Ifc4016d6e994064c0772c12e668e98bf055fada9
-rw-r--r-- | examples/launchconfig1.yaml | 23 | ||||
-rw-r--r-- | examples/launchconfig2.yaml | 19 | ||||
-rw-r--r-- | examples/launchconfig_result.yaml | 43 | ||||
-rw-r--r-- | merge.py | 20 | ||||
-rwxr-xr-x | test_merge.bash | 1 |
5 files changed, 98 insertions, 8 deletions
diff --git a/examples/launchconfig1.yaml b/examples/launchconfig1.yaml new file mode 100644 index 00000000..9127eab9 --- /dev/null +++ b/examples/launchconfig1.yaml @@ -0,0 +1,23 @@ +Parameters: + A: + Type: String + Default: test1 + B: + Type: String + Default: test2 + resource1Image: + Type: String + Default: resource1 +Resources: + notcomputeConfigBase: + Type: AWS::AutoScaling::LaunchConfiguration + Metadata: + OpenStack::Role: notcomputeConfig + a: {Ref: A} + b: {Ref: B} + resource1: + Type: OS::Nova::Server + Properties: + flavor: test_flavor + image: {Ref: resource1Image} + key_name: test_key diff --git a/examples/launchconfig2.yaml b/examples/launchconfig2.yaml new file mode 100644 index 00000000..1681637b --- /dev/null +++ b/examples/launchconfig2.yaml @@ -0,0 +1,19 @@ +Parameters: + C: + Type: String + Default: test3 + resource2Image: + Type: String + Default: resource2 +Resources: + notcomputeConfigMixin: + Type: AWS::AutoScaling::LaunchConfiguration + Metadata: + OpenStack::Role: notcomputeConfig + c: {Ref: C} + resource2: + Type: OS::Nova::Server + Properties: + flavor: test_flavor + image: {Ref: resource2Image} + key_name: test_key diff --git a/examples/launchconfig_result.yaml b/examples/launchconfig_result.yaml new file mode 100644 index 00000000..76c12b84 --- /dev/null +++ b/examples/launchconfig_result.yaml @@ -0,0 +1,43 @@ +Description: examples/launchconfig1.yaml,examples/launchconfig2.yaml +HeatTemplateFormatVersion: '2012-12-12' +Parameters: + A: + Default: test1 + Type: String + B: + Default: test2 + Type: String + C: + Default: test3 + Type: String + resource1Image: + Default: resource1 + Type: String + resource2Image: + Default: resource2 + Type: String +Resources: + notcomputeConfig: + Metadata: + OpenStack::Role: notcomputeConfig + a: + Ref: A + b: + Ref: B + c: + Ref: C + Type: AWS::AutoScaling::LaunchConfiguration + resource1: + Properties: + flavor: test_flavor + image: + Ref: resource1Image + key_name: test_key + Type: OS::Nova::Server + resource2: + Properties: + flavor: test_flavor + image: + Ref: resource2Image + key_name: test_key + Type: OS::Nova::Server @@ -48,6 +48,8 @@ MERGABLE_TYPES = {'OS::Nova::Server': {'image': 'image'}, 'AWS::EC2::Instance': {'image': 'ImageId'}, + 'AWS::AutoScaling::LaunchConfiguration': + {}, } @@ -119,10 +121,11 @@ for template_path in templates: new_resources = template.get('Resources', {}) for r, rbody in sorted(new_resources.items()): if rbody['Type'] in MERGABLE_TYPES: - image_key = MERGABLE_TYPES[rbody['Type']]['image'] - # XXX Assuming ImageId is always a Ref - ikey_val = end_template['Parameters'][rbody['Properties'][image_key]['Ref']] - del end_template['Parameters'][rbody['Properties'][image_key]['Ref']] + if 'image' in MERGABLE_TYPES[rbody['Type']]: + image_key = MERGABLE_TYPES[rbody['Type']]['image'] + # XXX Assuming ImageId is always a Ref + ikey_val = end_template['Parameters'][rbody['Properties'][image_key]['Ref']] + del end_template['Parameters'][rbody['Properties'][image_key]['Ref']] role = rbody.get('Metadata', {}).get('OpenStack::Role', r) role = translate_role(role) if role != r: @@ -143,9 +146,10 @@ for template_path in templates: if 'Resources' not in end_template: end_template['Resources'] = {} end_template['Resources'][role] = rbody - ikey = '%sImage' % (role) - end_template['Resources'][role]['Properties'][image_key] = {'Ref': ikey} - end_template['Parameters'][ikey] = ikey_val + if 'image' in MERGABLE_TYPES[rbody['Type']]: + ikey = '%sImage' % (role) + end_template['Resources'][role]['Properties'][image_key] = {'Ref': ikey} + end_template['Parameters'][ikey] = ikey_val elif rbody['Type'] == 'FileInclude': with open(rbody['Path']) as rfile: include_content = yaml.safe_load(rfile.read()) @@ -196,7 +200,7 @@ def fix_ref(item, old, new): for change in resource_changes: fix_ref(end_template, change[0], change[1]) - + if errors: for e in errors: sys.stderr.write("ERROR: %s\n" % e) diff --git a/test_merge.bash b/test_merge.bash index 0eeb2262..e6bfb192 100755 --- a/test_merge.bash +++ b/test_merge.bash @@ -26,6 +26,7 @@ echo run_test "python merge.py examples/source.yaml" examples/source_lib_result.yaml run_test "python merge.py examples/source2.yaml" examples/source2_lib_result.yaml run_test "python merge.py examples/source_include_subkey.yaml" examples/source_include_subkey_result.yaml +run_test "python merge.py examples/launchconfig1.yaml examples/launchconfig2.yaml" examples/launchconfig_result.yaml echo trap - EXIT exit $fail |