From 8d220d1c7223d3125e6cb68f9b3d6a113d9825b9 Mon Sep 17 00:00:00 2001 From: Mateus Caruccio Date: Tue, 13 Dec 2022 09:30:36 -0300 Subject: [PATCH] Replace variables-modules-merge.tf for json --- Makefile | 4 ++-- make-modules | 34 +++++++++++++++++---------------- variables-modules-merge.tf | 7 ------- variables-modules-merge.tf.json | 9 +++++++++ 4 files changed, 29 insertions(+), 25 deletions(-) delete mode 100644 variables-modules-merge.tf create mode 100644 variables-modules-merge.tf.json diff --git a/Makefile b/Makefile index 648440f..57e7928 100644 --- a/Makefile +++ b/Makefile @@ -11,8 +11,8 @@ import: $(foreach i,$(filter https://% http://%, $(IMPORT_SOURCES)),curl -sLO $(i);) $(foreach i,$(filter-out https://% http://%, $(IMPORT_SOURCES)),cp -f $(i) ./;) -modules: variables-modules-merge.tf -variables-modules-merge.tf: variables-modules.tf +modules: variables-modules-merge.tf.json +variables-modules-merge.tf.json: variables-modules.tf ./make-modules $< > $@ test: modules fmt lint init validate diff --git a/make-modules b/make-modules index a658b0b..0a04c00 100755 --- a/make-modules +++ b/make-modules @@ -7,23 +7,25 @@ from hcl2.parser import hcl2 display_path = '' if len(sys.argv) < 2 else sys.argv[1] path = sys.stdin if len(sys.argv) < 2 else open(sys.argv[1], 'r') data = hcl2.parse(path.read()) +indent = 2 +locals_block = { + '//': ['This file was auto-generated by command:', f'$ {sys.argv[0]} {display_path}'] +} -print(''' -## This file is auto-generated by command: -## $ %s %s - -locals { - modules = {'''.strip() % (sys.argv[0], display_path)) +def update(d, parents=[]): + for k, v in d.items(): + if isinstance(v, dict): + d[k] = update(d[k], parents + [k]) + else: + path = '.'.join(parents + [k]) + d[k] = f'${{try(var.modules.{path}, var.modules_defaults.{path})}}' + return d for variables in data['variable']: - for name, value in variables.items(): - if name != 'modules_defaults': + for var_name, var_value in variables.items(): + if var_name != 'modules_defaults': continue - for var_default_name, var_default_value in value['default'].items(): - print(f' {var_default_name} = {{') - for var_default_value_item_name in var_default_value: - module_item = f'{var_default_name}.{var_default_value_item_name}' - print(f' {var_default_value_item_name} = try(var.modules.{module_item}, var.modules_defaults.{module_item})') - print(' }') -print(' }') -print('}') + default = var_value['default'] + locals_block['locals'] = { 'modules': update(default) } + +print(json.dumps(locals_block,indent=indent)) diff --git a/variables-modules-merge.tf b/variables-modules-merge.tf deleted file mode 100644 index fb1f52f..0000000 --- a/variables-modules-merge.tf +++ /dev/null @@ -1,7 +0,0 @@ -## This file is auto-generated by command: -## $ ./make-modules variables-modules.tf - -locals { - modules = { - } -} diff --git a/variables-modules-merge.tf.json b/variables-modules-merge.tf.json new file mode 100644 index 0000000..2d8430c --- /dev/null +++ b/variables-modules-merge.tf.json @@ -0,0 +1,9 @@ +{ + "//": [ + "This file was auto-generated by command:", + "$ ./make-modules variables-modules.tf" + ], + "locals": { + "modules": {} + } +}