如何在自定义 ansible 模板引擎的动作插件中正确部署变量?

How to properly deploy variables in action plugin for custom ansible templating engine?

我正在为ansible写一个动作插件。作为模板处理程序,一个用 C# 编写的自定义实用程序,它接受一个模板文件和一个包含变量的 json 文件作为参数。

面对复合变量没有展开成结果的情况。即,例如,{{ some_var }} text {{ another_var }}在模板引擎处理后保留为{{ some_var }} text {{ another_var }}。并且在 json 文件中没有变量的结果值。

模板:

{{ var1 }} | {{ var2 }}

数据:

var1: "some text"
var2: "{{ var1 }} + another text"

期望:

some text | some text + another text

现实:

some text | {{ var1 }} + another text

我在 json 中保存变量是这样的:

    def run(self, tmp=None, task_vars=None):
        ...
        self.variables = dict()
...
    def prepare_data(self):
        self.variables.update(generate_ansible_template_vars(self.source, self.dest))
        self.variables.update(self._templar.available_variables)
        with open(self.data_file, "w") as outfile:
          json.dump(self.variables, outfile, indent=4, cls=AnsibleJSONEncoder)

可以找到插件代码there

我做错了什么?

ps:这个问题不是 this question 的重复问题,因为它不是 jinja 模板引擎,关键字 safe 什么都不做。

模板:

{{ var1 }} | {{ var2 }}

数据:

var1: "some text"
var2: "{{ var1 | safe }} + another text"

现实:

some text | {{ var1 | safe }} + another text

只需使用_templar

template方法
    def prepare_data(self):
        self.variables.update(generate_ansible_template_vars(self.source, self.dest))
        self.variables.update(self._templar.available_variables)
        self.variables.update(self._templar.template(self.variables)) # <--- 
        with open(self.data_file, "w") as outfile:
          json.dump(self.variables, outfile, indent=4, cls=AnsibleJSONEncoder)