将“具有vars模板”的yml文件转换为“无模板”的yml文件

时间:2019-09-05 10:17:49

标签: ansible yaml jinja2 devops templating

我在一个带有模板和vars的ansible项目中保存了这些yml文件:

custom_values:
      postgresql:
        postgresqlDatabase: "{{ secrets.db_name }}"
        postgresqlPassword: "{{ secrets.postgres_password }}"

我搜索一种解决方案以生成相同的yml文件,而无需像这样的模板:

custom_values:
      postgresql:
        postgresqlDatabase: "mydatabase"
        postgresqlPassword: "mypassword"

您知道现有的软件可以自动执行此操作吗?

2 个答案:

答案 0 :(得分:0)

您已经有一组ansible模板,它们由Jinja2之类的渲染引擎渲染。 转换它们的最简单方法是实际使用渲染引擎来渲染模板,并为其提供正确的值。 您将最终得到一堆具有{{ something }}块的模板,并用所需的值替换。

由于这看起来像是简单的Jinja2模板,因此请参考:https://jinja.palletsprojects.com/en/2.10.x/

您最终将得到以下内容:

>>> from jinja2 import Template
>>> template = Template('Hello {{ name }}!')
>>> template.render(name='John Doe')

另请参阅以下stackoverflow帖子:How to load jinja template directly from filesystem

这说明了如何从文件加载模板

答案 1 :(得分:0)

这个python代码对我来说还可以:

#import necessary functions from Jinja2 module
from jinja2 import Environment, FileSystemLoader

#Import YAML module
import yaml

#Load data from YAML into Python dictionary
config_data = yaml.load(open('./my_vars.txt'))

#Load Jinja2 template
env = Environment(loader = FileSystemLoader('./templates'), trim_blocks=True, lstrip_blocks=True)
template = env.get_template('my_template.yml')

#Render the template with data and print the output
print(template.render(config_data))

谢谢:)