#!/usr/bin/env python3 from __future__ import (absolute_import, division, print_function) __metaclass__ = type """ Software Name : AWSTerraformStarterKit SPDX-FileCopyrightText: Copyright (c) 2023 Orange Business SPDX-License-Identifier: BSD-3-Clause This software is distributed under the BSD License; see the LICENSE file for more details. Author: AWS Practice Team """ import os import sys import jinja2 import yaml class Render: TEMPLATES_DIR = os.environ.get('TEMPLATES_DIR') if os.environ.get('TEMPLATES_DIR') is not None else "/templates" def __init__(self, template_name=None, variables_path=None): self.template_name = template_name self.variables_path = variables_path self.env = jinja2.Environment( loader=jinja2.FileSystemLoader(self.TEMPLATES_DIR), extensions=['jinja2.ext.loopcontrols'], autoescape=True, lstrip_blocks=True, newline_sequence="\n", trim_blocks=True, keep_trailing_newline=True ) def yaml_filter(value): return yaml.dump(value, Dumper=yaml.RoundTripDumper, indent=4) def rend_template(self): with open(self.variables_path, closefd=True) as f: data = yaml.full_load(f) self.env.filters['yaml'] = self.yaml_filter self.env.globals["environ"] = lambda key: os.environ.get(key) try: rendered = self.env.get_template(self.template_name).render(data) except Exception as e: raise e return rendered def main(): min_args = 3 if len(sys.argv) < min_args: raise Exception( "Error: Expecting at least {} args. Got {}, args={}".format(min_args, len(sys.argv), sys.argv)) sys.stdout.write(Render(sys.argv[1], sys.argv[2]).rend_template()) if __name__ == '__main__': main()