ansible.utils.fact_diff module – Find the difference between currently set facts
Note
This module is part of the ansible.utils collection (version 5.1.2).
You might already have this collection installed if you are using the ansible
package.
It is not included in ansible-core
.
To check whether it is installed, run ansible-galaxy collection list
.
To install it, use: ansible-galaxy collection install ansible.utils
.
To use it in a playbook, specify: ansible.utils.fact_diff
.
New in ansible.utils 1.0.0
Synopsis
Compare two facts or variables and get a diff.
Note
This module has a corresponding action plugin.
Parameters
Parameter |
Comments |
---|---|
The second fact to be used in the comparison. |
|
The first fact to be used in the comparison. |
|
Configure and specify the diff plugin to use Default: |
|
The diff plugin to use, in fully qualified collection name format. Default: |
|
Parameters passed to the diff plugin. Default: |
|
Skip lines matching these regular expressions. Matches will be removed prior to the diff. If the provided before and after are a string, they will be split. Each entry in each list will be cast to a string for the comparison |
Examples
- 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]
Return Values
Common return values are documented here, the following are the fields unique to this module:
Key |
Description |
---|---|
The diff_text split into lines. Returned: always |
|
The diff in text format. Returned: always |