如何在自定义 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)
我正在为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)