我正在try 修改JSON文件中的几个值.要做到这一点,最有效的方法似乎是使用UPDATE_FACT模块,它需要输出到寄存器.我遇到的问题是,我需要运行一个JSON查询来找到我需要修改的数据.
当我try 使用UPDATE_FACT修改json文件时,我希望在单个UPDATE_FACT块中使用json_Query,这样我就不需要在末尾go 掉递归寄存器名称,但每次try 时,Ansible都会告诉我
msg: 'template error while templating string: unexpected char ''?'' at 40. String: {{ jsondata.stigs[0].rules| json_query([?group_id==V-256376].comments)}}'
个
有没有更好的方法来做到这一点,而不必try 和打破JSON文件完全分开,修改每个部分,并try 把它放回一起.这样做的最终目标是修改一堆vule并将其输出到文件中.
我的 playbook
tasks:
- name: Read file directly into fact
set_fact:
jsondata: "{{ lookup('file', './files/U_VMW_vSphere_7-0_ESXi_V1R2_Manual_STIG.cklb') | from_json}}"
- debug:
msg: "{{ test.stigs[0].rules|json_query(query)}}"
vars:
groupid: 'V-256376'
query: "[?group_id=='{{ groupid }}'].discussion"
register: v256376
- name: update IP address
ansible.utils.update_fact:
updates:
- path: jsondata.target_data.ip_address
value: "10.10.10.10"
- path: jsondata.target_data.host_name
value: "{{ esxserver }}"
- path: "{{ jsondata.stigs[0].rules| json_query([?group_id==V-256376].comments)}}"
value: "this worked"
register: jsondata
Edit adding mre for follow up question 判断表json文件精简为2个示例
{
"stigs": [
{
"rules": [
{
"group_id": "V-256375",
"status": "not_reviewed",
"comments": "",
"finding_details": ""
},
{
"group_id": "V-256375",
"status": "not_reviewed",
"comments": "",
"finding_details": ""
}
}
}
对于每个group_id,我需要进行一个API调用来判断,然后将状态字段更改为OPEN或NOT_A_FINDING,然后使用API调用的输出填充COMMENTS/FINDING_DETAILS.