Add handling of parameter replacements.
authorClint Byrum <clint@fewbar.com>
Wed, 10 Jul 2013 17:58:05 +0000 (10:58 -0700)
committerClint Byrum <clint@fewbar.com>
Wed, 10 Jul 2013 21:11:40 +0000 (14:11 -0700)
We will need to replace the use of Parameters in the included template
with actual values in many cases.

Change-Id: I95fc9116dc2bba74c31d5570851c5c4eb476291a

merge.py

index 64cb00a..768ae42 100644 (file)
--- a/merge.py
+++ b/merge.py
@@ -29,6 +29,22 @@ def translate_role(role):
         raise Exception('%s -> %r' % (role, r))
     return r
 
+def resolve_params(item, param, value):
+    if item == {'Ref': param}:
+        return value
+    if isinstance(item, dict):
+        copy_item = dict(item)
+        for k, v in iter(copy_item.items()):
+            item[k] = resolve_params(v, param, value) 
+    elif isinstance(item, list):
+        copy_item = list(item)
+        new_item = []
+        for v in copy_item:
+            new_item.append(resolve_params(v, param, value))
+        item = new_item
+    return item
+
+
 errors = []
 end_template={'HeatTemplateFormatVersion': '2012-12-12',
               'Description': []}
@@ -93,6 +109,11 @@ for template_path in templates:
                 subkeys = rbody.get('SubKey','').split('.')
                 while len(subkeys) and subkeys[0]:
                     include_content = include_content[subkeys.pop(0)]
+                for replace_param, replace_value in iter(rbody.get('Parameters',
+                                                                   {}).items()):
+                    include_content = resolve_params(include_content,
+                                                     replace_param,
+                                                     replace_value)
                 end_template['Resources'][r] = include_content
         else:
             if r in end_template.get('Resources', {}):