예제 #1
0
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)
예제 #2
0
파일: jinja2.py 프로젝트: xydinesh/kapitan
    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)
예제 #3
0
    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)