比较2个json文件,并根据第二个文件(file2.yml)|ansible将其差异复制到另一个文件中



我正在尝试比较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"
}
}

最新更新