将 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))
谢谢:)
我在一个带有模板和变量的 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))
谢谢:)