将 ansible yml 文件 "with vars templating" 转换为 yml 文件 "without templating"

Transform ansible yml files "with vars templating" to yml files "without templating"

我在一个带有模板和变量的 ansible 项目中有这个 yml 文件:

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

我搜索了一个解决方案来生成相同的 yml 文件而不像这样的模板:

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

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

您已经有了一组 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')

请同时参考这个Whosebug post:

这解释了如何从文件加载模板

这个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))

谢谢:)