Find the difference between currently set facts
Version added: 1.0.0
- Compare two facts or variables and get a diff.
- ansible.builtin.set_fact:
before:
a:
b:
c:
d:
- 0
- 1
after:
a:
b:
c:
d:
- 2
- 3
- name: Show the difference in json format
ansible.utils.fact_diff:
before: "{{ before }}"
after: "{{ after }}"
# TASK [ansible.utils.fact_diff] **************************************
# --- before
# +++ after
# @@ -3,8 +3,8 @@
# "b": {
# "c": {
# "d": [
# - 0,
# - 1
# + 2,
# + 3
# ]
# }
# }
#
# changed: [localhost]
- name: Show the difference in path format
ansible.utils.fact_diff:
before: "{{ before | ansible.utils.to_paths }}"
after: "{{ after | ansible.utils.to_paths }}"
# TASK [ansible.utils.fact_diff] **************************************
# --- before
# +++ after
# @@ -1,4 +1,4 @@
# {
# - "a.b.c.d[0]": 0,
# - "a.b.c.d[1]": 1
# + "a.b.c.d[0]": 2,
# + "a.b.c.d[1]": 3
# }
#
# changed: [localhost]
- name: Show the difference in yaml format
ansible.utils.fact_diff:
before: "{{ before | to_nice_yaml }}"
after: "{{ after | to_nice_yaml }}"
# TASK [ansible.utils.fact_diff] **************************************
# --- before
# +++ after
# @@ -2,5 +2,5 @@
# b:
# c:
# d:
# - - 0
# - - 1
# + - 2
# + - 3
# changed: [localhost]
#### Show the difference between complex object using restconf
# ansible_connection: ansible.netcommon.httpapi
# ansible_httpapi_use_ssl: True
# ansible_httpapi_validate_certs: False
# ansible_network_os: ansible.netcommon.restconf
- name: Get the current interface config prior to changes
ansible.netcommon.restconf_get:
content: config
path: /data/Cisco-NX-OS-device:System/intf-items/phys-items
register: pre
- name: Update the description of eth1/100
ansible.utils.update_fact:
updates:
- path: "pre['response']['phys-items']['PhysIf-list'][{{ index }}]['descr']"
value: "Configured by ansible {{ 100 | random }}"
vars:
index: "{{ pre['response']['phys-items']['PhysIf-list'] | ansible.utils.index_of('eq', 'eth1/100', 'id') }}"
register: updated
- name: Apply the configuration
ansible.netcommon.restconf_config:
path: 'data/Cisco-NX-OS-device:System/intf-items/'
content: "{{ updated.pre.response}}"
method: patch
- name: Get the current interface config after changes
ansible.netcommon.restconf_get:
content: config
path: /data/Cisco-NX-OS-device:System/intf-items/phys-items
register: post
- name: Show the difference
ansible.utils.fact_diff:
before: "{{ pre.response | ansible.utils.to_paths }}"
after: "{{ post.response | ansible.utils.to_paths }}"
# TASK [ansible.utils.fact_diff] *********************************************
# --- before
# +++ after
# @@ -3604,7 +3604,7 @@
# "phys-items['PhysIf-list'][37].bw": "0",
# "phys-items['PhysIf-list'][37].controllerId": "",
# "phys-items['PhysIf-list'][37].delay": "1",
# - "phys-items['PhysIf-list'][37].descr": "Configured by ansible 95",
# + "phys-items['PhysIf-list'][37].descr": "Configured by ansible 20",
# "phys-items['PhysIf-list'][37].dot1qEtherType": "0x8100",
# "phys-items['PhysIf-list'][37].duplex": "auto",
# "phys-items['PhysIf-list'][37].id": "eth1/100",
# changed: [nxos101]
Common return values are documented here, the following are the fields unique to this module:
Key | Returned | Description |
---|---|---|
diff_lines
list
/ elements=string
|
always |
The diff_text split into lines.
|
diff_text
string
|
always |
The diff in text format.
|
- Bradley Thornton (@cidrblock)