Преобразование файлов ansible yml с шаблонами vars в файлы yml без шаблонов

У меня есть эти файлы yml внутри проекта ansible с шаблонами и vars:

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

Я ищу решение для создания того же файла yml без шаблонов, например:

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

Знаете ли вы существующее программное обеспечение, чтобы сделать это автоматически?


person DevOpsAddict    schedule 05.09.2019    source источник


Ответы (2)


У вас уже есть набор доступных шаблонов, которые рендерятся с помощью механизма рендеринга, такого как 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: Как загрузить шаблон jinja непосредственно из файловой системы

Это объясняет, как загружать шаблоны из файлов

person J. Meijers    schedule 05.09.2019

Этот код 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))

спасибо :)

person DevOpsAddict    schedule 05.09.2019
comment
Рад видеть, что ты разобрался! Не забудьте отметить вопрос как ответ - person J. Meijers; 09.09.2019