我正在编写Ansible游戏,其中一项任务是将条目附加到JSON文档中。 E.g。
JSON文档staff.json
:
{
"staff":[
{
"john":[
{
"position":"techwriter"
},
{
"sex":"male"
}
]
}
]
}
我需要将此条目附加到staff
:
{
"staff":[
{
"john":[
{
"position":"techwriter"
},
{
"sex":"male"
}
]
},
{
"jane":[
{
"position":"admin"
},
{
"sex":"female"
}
]
}
]
}
该条目将从Ansible template
生成,如下所示:
{
"{{ staff_name }}":[
{
"position":"{{ staff_position }}"
},
{
"sex":"{{ staff_sex }}"
}
]
}
我已经学会使用jq
到append entry到JSON文档,如“Add json array element with jq (cmdline)”中所示。但是,我不知道如何在Ansible中实现它,因为模板会输出到文件。
我需要这样的解决方案:
cat staff.json | jq '.staff |= .+ ["OUTPUT_FROM_TEMPLATE"]'
欢迎任何想法。
答案 0 :(得分:1)
您可以使用template
查找插件:
- shell: cat staff.json | jq '.staff |= . + [{{ item | to_json }}]' > staff.json
with_template: person.j2
vars:
staff_name: jane
staff_position: admin
staff_sex: female
请注意,您需要将to_json
过滤器与item
一起使用,因为Ansible模板引擎会将可以评估的json字符串转换为dict。