For example, given the static_dir for testing
static_dir:
id1: 123
id2: 456
id5: 789
I assume the results is a list. For example,
result_dir:
results:
- item: id1
stat:
checksum: 123
- item: id5
stat:
checksum: 789
Create a dictionary
dynamic_dir: "{{ dict(result_dir.results |
json_query('[].[item, stat.checksum]')) }}"
gives
dynamic_dir:
id1: 123
id5: 789
Then, the comparison is trivial. For example,
- debug:
msg: |
static: {{ static }}
dynamic: {{ dynamic }}
vars:
static: "{{ dynamic_dir.keys() | map('extract', static_dir) }}"
dynamic: "{{ dynamic_dir.values() }}"
gives
msg: |-
static: [123, 789]
dynamic: [123, 789]
Example of a complete playbook for testing
- hosts: all
vars:
static_dir:
id1: 123
id2: 456
id5: 789
result_dir:
results:
- item: id1
stat:
checksum: 123
- item: id5
stat:
checksum: 789
dynamic_dir: "{{ dict(result_dir.results |
json_query('[].[item, stat.checksum]')) }}"
tasks:
- debug:
var: dynamic_dir
- debug:
msg: |
static: {{ static }}
dynamic: {{ dynamic }}
vars:
static: "{{ dynamic_dir.keys() | map('extract', static_dir) }}"
dynamic: "{{ dynamic_dir.values() }}"
- assert:
that: dynamic | difference(static) | length == 0
success_msg: '[OK] Checksums match.'
fail_msg: '[ERR] Checksums do not match.'
vars:
static: "{{ dynamic_dir.keys() | map('extract', static_dir) }}"
dynamic: "{{ dynamic_dir.values() }}"
Optionally, list failed ID(s)
- assert:
that: dynamic | difference(static) | length == 0
success_msg: '[OK] Checksums match.'
fail_msg: |
[ERR] Failed checksums: {% for id,checksum in dynamic_dir.items() %}
{% if static_dir[id] != checksum %}
{{ id }} {% endif %}
{% endfor %}
vars:
static: "{{ dynamic_dir.keys() | map('extract', static_dir) }}"
dynamic: "{{ dynamic_dir.values() }}"