diff options
-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 |