我在一个带有模板和vars的ansible项目中保存了这些yml文件:
custom_values:
postgresql:
postgresqlDatabase: "{{ secrets.db_name }}"
postgresqlPassword: "{{ secrets.postgres_password }}"
我搜索一种解决方案以生成相同的yml文件,而无需像这样的模板:
custom_values:
postgresql:
postgresqlDatabase: "mydatabase"
postgresqlPassword: "mypassword"
您知道现有的软件可以自动执行此操作吗?
答案 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))
谢谢:)