Переносимые переменные записи в файл YAML

У меня есть специфическая структура переменных, которую я хочу получить из хранилища в файл yaml на моих хостах.

Давайте предположим такую ​​структуру:

secrets:
   psp1:
     username: this
     password: that
   secret_key: 123
  ...

Мне нужно что-то вроде шаблона "generic" для вывода каких-либо "секретов" на данный момент, поскольку контент изменяется почти полностью на основе текущей среды.

Самое легкое решение, о котором я могу думать, - вывести всю структуру в шаблоне следующим образом:

# config/secrets.yml
{{ secrets | to_yaml }}

Но фильтр jinja2 to_yaml выполняет только "yamlify" на первом уровне, более глубокие вложения выводятся в json.

Могу ли я как-то обойти эту проблему? Есть ли более простой способ достичь того, что я хочу?

Спасибо за любую помощь!

Ответ 1

  1. Как сказал jwodder, это действительно.
  2. Если вы используете to_yaml (вместо to_nice_yaml), у вас довольно старая установка ansible, самое время обновить.
  3. Используйте to_nice_yaml
  4. Можно передать ваши собственные kwargs функциям фильтрации, которые обычно передают их вызову основного модуля python. Как и этот для вашего случая. Так что-то вроде:

    {{ secrets | to_nice_yaml( width=50, explicit_start=True, explicit_end=True) }}
    

    Единственная проблема в том, что вы не можете переопределить indent=4, allow_unicode=True, default_flow_style=False

Обратите внимание, что теперь indent можно переопределить, по крайней мере, начиная с Ansible 2.2.0 (я использую его для отступа в 2 пробела, чтобы следовать стандартам кодирования для одного проекта).