Ansible 将变量写入 YAML 文件

Ansible write variables into YAML file

我有一个特定的 ansible 变量结构,我想将其从保管库中获取到主机上的 yaml 文件中。

让我们假设这样的结构:

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

我需要类似 "generic" 模板的东西来输出 "secrets" 目前包含的任何内容,因为内容几乎完全根据当前环境而变化。

我能想到的最简单的解决方案是在这样的模板中输出整个结构:

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

但是 jinja2 to_yaml 过滤器只做 "yamlify" 第一级,更深的嵌套在 json 中输出。

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

感谢您的帮助!

  1. 正如jwodder所说,有效

  2. 如果您使用的是 to_yaml(而不是 to_nice_yaml),那么您安装的 ansible 相当旧,是时候升级了。

  3. 使用to_nice_yaml

  4. 可以将您自己的 kwargs 传递给过滤函数,这些函数通常将它们传递给底层 python 模块调用。喜欢 this one 适合你的情况。所以像这样:

     {{ 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 个空格以遵循一个项目的编码标准)。

可以找到 to_nice_yaml 的更好文档 here