summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/launchconfig1.yaml23
-rw-r--r--examples/launchconfig2.yaml19
-rw-r--r--examples/launchconfig_result.yaml43
-rw-r--r--merge.py20
-rwxr-xr-xtest_merge.bash1
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
diff --git a/merge.py b/merge.py
index 3b7d2dd3..fe42b8db 100644
--- a/merge.py
+++ b/merge.py
@@ -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