我正在尝试比较2个json文件,并通过ansible将其差异打印到另一个文件,但无法这样做。
我尝试过复制和ansible.utils.fact_diff模块,但没有成功
文件1.yml
"from": "abc@gmail.com",
"is_enabled": "true",
"is_local": "true",
"is_data": "true",
"isin_subject": "false",
文件2.yml
"from": "xyz@gmail.com",
"is_enabled": "false",
"is_local": "true",
"is_data": "true",
"isin_subject": "false",
输出:file3.yml
"from": "xyz@gmail.com",
"is_enabled": "false",
只需循环dict并进行比较:
source0.json:
{
"from": "abc@gmail.com",
"is_enabled": "true",
"is_local": "true",
"is_data": "true",
"isin_subject": "false"
}
source1.json:
{
"from": "xyz@gmail.com",
"is_enabled": "false",
"is_local": "true",
"is_data": "true",
"isin_subject": "false"
}
剧本:
- hosts: localhost
gather_facts: false
vars:
json0: "{{ lookup('file', 'source0.json') | from_json }}"
json1: "{{ lookup('file', 'source1.json') | from_json }}"
tasks:
- name: diff
set_fact:
diff: "{{ diff | d({}) | combine({item.key: item.value}) }}"
loop: "{{ json1 | dict2items }}"
when: item.value != json0[item.key]
- name: display diff
debug:
msg: "{{ diff }}"
结果:
ok: [localhost] => {
"msg": {
"from": "xyz@gmail.com",
"is_enabled": "false"
}
}