ansible JINJA2模板中的变量问题

时间:2017-09-08 15:43:53

标签: python ansible jinja2

我在使用ansible中的变量创建JSON文件(在JINJA2中)时遇到了问题。

变量

1:    
    abc:
        add1: "1614"
        add2: "1615"
        add3: "1616"
2:    
    deb:
        add5: "1617"
        add6: "1618"
        add7: "1619"

在JINJA2模板中,我定义了像

这样的值

value: {{1 | 2}}

然后格式化不正确。它应该是

{
  "abc": {
    "add1": "1614",
    "add2": "1615",
    "add3": "1616"
  },
  "deb": {
    "add5": "1617",
    "add6": "1618",
    "add7": "1619"
  }
}

有关JINJA2声明的任何建议吗?

1 个答案:

答案 0 :(得分:0)

在Jinja2中,条形字符(" |")为used to apply a filter,因此在这种情况下,它会尝试将过滤器2应用于1,这显然没有意义!

在这种情况下,我建议使用Jinja2的builtin tojson filter,它会将python对象变成最接近JSON的对象。如果您使用的Jinja2版本大于2.9,则会出现此情况。

理想情况下,我会预先处理数据,以便12位于同一个字典中,因此您只需编写:

{{ combined | tojson }}

如果这不是一个选项,你可以试着看起来更丑陋:

{{ dict(1, **2) | tojson }}

这使用pythons dict constructor来合并两个词典。

编辑:如果你想漂亮打印你的json,请调用tojson过滤器,你需要多少缩进,例如。获得2个空格缩进使用:

{{ data | tojson(2) }}