Ansible将变量写入YAML文件

11 python yaml jinja2 ansible

我有一个特定的ansible变量结构,我想从Vault中获取我的主机上的yaml文件.

让我们假设一个这样的结构:

secrets:
   psp1:
     username: this
     password: that
   secret_key: 123
  ...
Run Code Online (Sandbox Code Playgroud)

我需要类似"通用"模板的东西来输出当前包含的任何"秘密",因为内容几乎完全基于当前环境而变化.

我能想到的最简单的解决方案是在模板中输出整个结构,如下所示:

# config/secrets.yml
{{ secrets | to_yaml }}
Run Code Online (Sandbox Code Playgroud)

但jinja2 to_yaml过滤器只对第一级"yamlify"进行了更深层次的嵌套,在json中输出.

我可以以某种方式解决这个问题吗?有没有更简单的方法来实现我想要的?

谢谢你的帮助!

Kas*_*yap 18

  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) }}
    
    Run Code Online (Sandbox Code Playgroud)

    只有抓住你才能覆盖 indent=4, allow_unicode=True, default_flow_style=False

  • 注意,至少从Ansible 2.2.0起,现在可以覆盖`indent`(我使用它来缩进2个空格以遵循一个项目的编码标准)。参见:https://github.com/ansible/ansible/pull/17085 (2认同)