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 中输出。
我能以某种方式解决这个问题吗?有没有更简单的方法来实现我想要的?
感谢您的帮助!
正如jwodder所说,有效
如果您使用的是 to_yaml
(而不是 to_nice_yaml
),那么您安装的 ansible 相当旧,是时候升级了。
使用to_nice_yaml
可以将您自己的 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。
我有一个特定的 ansible 变量结构,我想将其从保管库中获取到主机上的 yaml 文件中。
让我们假设这样的结构:
secrets:
psp1:
username: this
password: that
secret_key: 123
...
我需要类似 "generic" 模板的东西来输出 "secrets" 目前包含的任何内容,因为内容几乎完全根据当前环境而变化。
我能想到的最简单的解决方案是在这样的模板中输出整个结构:
# config/secrets.yml
{{ secrets | to_yaml }}
但是 jinja2 to_yaml 过滤器只做 "yamlify" 第一级,更深的嵌套在 json 中输出。
我能以某种方式解决这个问题吗?有没有更简单的方法来实现我想要的?
感谢您的帮助!
正如jwodder所说,有效
如果您使用的是
to_yaml
(而不是to_nice_yaml
),那么您安装的 ansible 相当旧,是时候升级了。使用
to_nice_yaml
可以将您自己的 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。