Python Ansible将变量写入YAML文件

Python Ansible将变量写入YAML文件,python,yaml,jinja2,ansible,Python,Yaml,Jinja2,Ansible,我有一个特定的ansible变量结构,我想从vault中获取它,并将其保存到主机上的yaml文件中 让我们假设这样的结构: secrets: psp1: username: this password: that secret_key: 123 ... # config/secrets.yml {{ secrets | to_yaml }} 我需要一个类似“通用”的模板来输出当前包含的任何“机密”,因为内容几乎完全根据当前环境进行更改 我能想到的最简单的解

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

让我们假设这样的结构:

secrets:
   psp1:
     username: this
     password: that
   secret_key: 123
  ...
# config/secrets.yml
{{ secrets | to_yaml }}
我需要一个类似“通用”的模板来输出当前包含的任何“机密”,因为内容几乎完全根据当前环境进行更改

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

secrets:
   psp1:
     username: this
     password: that
   secret_key: 123
  ...
# config/secrets.yml
{{ secrets | to_yaml }}
但是jinja2 to_yaml过滤器只执行第一级的“yamlify”,更深层次的嵌套以json输出

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

谢谢你的帮助

  • 正如jwodder所说,这是有效的

  • 如果您正在使用
    来安装ansible(而不是
    来安装ansible),那么是时候升级了

  • 使用
    来改善yaml

  • 您可以将自己的KWARG传递给过滤器函数,过滤器函数通常将它们传递给底层python模块调用。就像你的案子一样。比如:

     {{ secrets | to_nice_yaml( width=50, explicit_start=True, explicit_end=True) }}
    
  • 唯一的问题是你不能覆盖缩进=4,允许unicode=True,默认流=False


    请注意,
    indent
    现在可以被覆盖,至少从Ansible 2.2.0开始(我使用它缩进2个空格,以遵循一个项目的编码标准)


    可以找到更好的
    到\u nice\u yaml
    的文档。

    JSON是yaml的有效子集,所以您仍然可以得到yaml。@jwodder Arg!你当然是对的。我不知道为什么我总是忽视这个事实。谢谢。这对我的playbook for elasticsearch非常有用,从阵列中转储了整个配置。这不是一个格式错误,这是一个降价功能。列表项中的代码必须是双缩进的。请注意,indent现在可以被覆盖,至少从Ansible 2.2.0开始(我使用它缩进两个空格,以遵循一个项目的编码标准)。请参阅:@Kashyap您从哪里获得了_nice_yaml options文档?@EnzoR来自代码,而不是文档。但如果他们在过去的4年里更新了它,那是肯定的。