使用jq附加Ansible模板生成的输出

时间:2016-09-28 23:23:13

标签: json ansible

我正在编写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 }}"
            }
         ]
      }

我已经学会使用jqappend entry到JSON文档,如“Add json array element with jq (cmdline)”中所示。但是,我不知道如何在Ansible中实现它,因为模板会输出到文件。

我需要这样的解决方案:

cat staff.json | jq '.staff |= .+ ["OUTPUT_FROM_TEMPLATE"]'

欢迎任何想法。

1 个答案:

答案 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。