def compile_jinja2(path, context, compile_path, **kwargs): """ Write items in path as jinja2 rendered files to compile_path. path can be either a file or directory. kwargs: secrets_path: default None, set to access secrets backend secrets_reveal: default False, set to reveal secrets on compile target_name: default None, set to current target being compiled """ secrets_path = kwargs.get('secrets_path', None) secrets_reveal = kwargs.get('secrets_reveal', False) target_name = kwargs.get('target_name', None) for item_key, item_value in render_jinja2(path, context).items(): full_item_path = os.path.join(compile_path, item_key) try: os.makedirs(os.path.dirname(full_item_path)) except OSError as ex: # If directory exists, pass if ex.errno == errno.EEXIST: pass with CompiledFile(full_item_path, mode="w", secrets_path=secrets_path, secrets_reveal=secrets_reveal, target_name=target_name) as fp: fp.write(item_value["content"]) mode = item_value["mode"] os.chmod(full_item_path, mode) logger.debug("Wrote %s with mode %.4o", full_item_path, mode)
def compile_file(self, file_path, compile_path, ext_vars, **kwargs): """ Write items in path as jinja2 rendered files to compile_path. path can be either a file or directory. kwargs: reveal: default False, set to reveal refs on compile target_name: default None, set to current target being compiled """ reveal = kwargs.get('reveal', False) target_name = kwargs.get('target_name', None) # set ext_vars and inventory for jinja2 context context = ext_vars.copy() context["inventory"] = inventory(self.search_paths, target_name) context["inventory_global"] = inventory(self.search_paths, None) jinja2_filters = kwargs.get('jinja2_filters') for item_key, item_value in render_jinja2(file_path, context, jinja2_filters=jinja2_filters).items(): full_item_path = os.path.join(compile_path, item_key) os.makedirs(os.path.dirname(full_item_path), exist_ok=True) with CompiledFile(full_item_path, self.ref_controller, mode="w", reveal=reveal, target_name=target_name) as fp: fp.write(item_value["content"]) mode = item_value["mode"] os.chmod(full_item_path, mode) logger.debug("Wrote %s with mode %.4o", full_item_path, mode)
def compile_file(self, file_path, compile_path, ext_vars, **kwargs): """ Write items in path as jinja2 rendered files to compile_path. path can be either a file or directory. kwargs: reveal: default False, set to reveal refs on compile target_name: default None, set to current target being compiled """ reveal = kwargs.get("reveal", False) target_name = kwargs.get("target_name", None) # set ext_vars and inventory for jinja2 context context = ext_vars.copy() context["inventory"] = inventory(self.search_paths, target_name) context["inventory_global"] = inventory(self.search_paths, None) context["input_params"] = self.input_params # reset between each compile if jinja2 component is used multiple times self.input_params = {} jinja2_filters = kwargs.get("jinja2_filters") for item_key, item_value in render_jinja2( file_path, context, jinja2_filters=jinja2_filters, search_paths=self.search_paths).items(): full_item_path = os.path.join(compile_path, item_key) with CompiledFile(full_item_path, self.ref_controller, mode="w", reveal=reveal, target_name=target_name) as fp: fp.write(item_value["content"]) mode = item_value["mode"] os.chmod(full_item_path, mode) logger.debug("Wrote %s with mode %.4o", full_item_path, mode)