Skip to content

Instantly share code, notes, and snippets.

@cidrblock
Last active April 27, 2022 06:02
Show Gist options
  • Select an option

  • Save cidrblock/8fbd4082f839e37d623858e4e7c81236 to your computer and use it in GitHub Desktop.

Select an option

Save cidrblock/8fbd4082f839e37d623858e4e7c81236 to your computer and use it in GitHub Desktop.
Examples for ansible.utils.consolidate
- hosts: localhost
gather_facts: false
tasks:
- name: Define some test data
ansible.builtin.set_fact:
values:
- name: a
value: 1
- name: b
value: 2
- name: c
value: 3
colors:
- name: a
color: red
- name: b
color: green
- name: c
color: blue
- name: Define some test data
ansible.builtin.set_fact:
base_data:
- data: "{{ values }}"
match_key: name
prefix: values
- data: "{{ colors }}"
match_key: name
prefix: colors
- name: Consolidate the data source using the name key
ansible.builtin.set_fact:
consolidated: "{{ data_sources|ansible.utils.consolidate }}"
vars:
sizes:
- name: a
size: small
- name: b
size: medium
- name: c
size: large
additional_data_source:
- data: "{{ sizes }}"
match_key: name
prefix: sizes
data_sources: "{{ base_data + additional_data_source }}"
# consolidated:
# a:
# colors:
# color: red
# name: a
# sizes:
# name: a
# size: small
# values:
# name: a
# value: 1
# b:
# colors:
# color: green
# name: b
# sizes:
# name: b
# size: medium
# values:
# name: b
# value: 2
# c:
# colors:
# color: blue
# name: c
# sizes:
# name: c
# size: large
# values:
# name: c
# value: 3
- name: Consolidate the data source using different keys
ansible.builtin.set_fact:
consolidated: "{{ data_sources|ansible.utils.consolidate }}"
vars:
sizes:
- title: a
size: small
- title: b
size: medium
- title: c
size: large
additional_data_source:
- data: "{{ sizes }}"
match_key: title
prefix: sizes
data_sources: "{{ base_data + additional_data_source }}"
# consolidated:
# a:
# colors:
# color: red
# name: a
# sizes:
# size: small
# title: a
# values:
# name: a
# value: 1
# b:
# colors:
# color: green
# name: b
# sizes:
# size: medium
# title: b
# values:
# name: b
# value: 2
# c:
# colors:
# color: blue
# name: c
# sizes:
# size: large
# title: c
# values:
# name: c
# value: 3
- name: Consolidate the data source using the name key (fail_missing_match_key)
ansible.builtin.set_fact:
consolidated: "{{ data_sources|ansible.utils.consolidate(fail_missing_match_key=True) }}"
ignore_errors: true
vars:
vars:
sizes:
- size: small
- size: medium
- size: large
additional_data_source:
- data: "{{ sizes }}"
match_key: name
prefix: sizes
data_sources: "{{ base_data + additional_data_source }}"
# fatal: [localhost]: FAILED! => {
# "msg": "Error when using plugin 'consolidate': 'fail_missing_match_key'
# reported Missing match key 'name' in data source 2 in list entry 0,
# Missing match key 'name' in data source 2 in list entry 1,
# Missing match key 'name' in data source 2 in list entry 2"
# }
- name: Consolidate the data source using the name key (fail_missing_match_value)
ansible.builtin.set_fact:
consolidated: "{{ data_sources|ansible.utils.consolidate(fail_missing_match_value=True) }}"
ignore_errors: true
vars:
sizes:
- name: a
size: small
- name: b
size: medium
additional_data_source:
- data: "{{ sizes }}"
match_key: name
prefix: sizes
data_sources: "{{ base_data + additional_data_source }}"
# fatal: [localhost]: FAILED! => {
# "msg": "Error when using plugin 'consolidate': 'fail_missing_match_value'
# reported Missing match value c in data source 2"
# }
- name: Consolidate the data source using the name key (fail_duplicate)
ansible.builtin.set_fact:
consolidated: "{{ data_sources|ansible.utils.consolidate(fail_duplicate=True) }}"
ignore_errors: true
vars:
sizes:
- name: a
size: small
- name: a
size: small
additional_data_source:
- data: "{{ sizes }}"
match_key: name
prefix: sizes
data_sources: "{{ base_data + additional_data_source }}"
# fatal: [localhost]: FAILED! => {
# "msg": "Error when using plugin 'consolidate': 'fail_duplicate' reported Duplicate values in data source 2"
# }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment