update docs
parent
7801c67a5c
commit
ca31a4e474
|
@ -188,8 +188,242 @@ Examples
|
||||||
|
|
||||||
.. code-block:: yaml
|
.. code-block:: yaml
|
||||||
|
|
||||||
# Consolidated facts example
|
# Consolidated filter plugin example
|
||||||
# --------------------------
|
# ----------------------------------
|
||||||
|
|
||||||
|
##play.yml
|
||||||
|
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
|
||||||
|
name: values
|
||||||
|
- data: "{{ colors }}"
|
||||||
|
match_key: name
|
||||||
|
name: 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
|
||||||
|
name: sizes
|
||||||
|
data_sources: "{{ base_data + additional_data_source }}"
|
||||||
|
|
||||||
|
##Output
|
||||||
|
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "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
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
- 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
|
||||||
|
name: sizes
|
||||||
|
data_sources: "{{ base_data + additional_data_source }}"
|
||||||
|
|
||||||
|
##Output
|
||||||
|
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "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
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
- 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
|
||||||
|
name: sizes
|
||||||
|
data_sources: "{{ base_data + additional_data_source }}"
|
||||||
|
|
||||||
|
##Output
|
||||||
|
|
||||||
|
# fatal: [localhost]: FAILED! => {
|
||||||
|
# "msg": "Error when using plugin 'consolidate': 'fail_missing_match_key'
|
||||||
|
# reported missing match key 'name' in data source 3 in list entry 1,
|
||||||
|
# missing match key 'name' in data source 3 in list entry 2,
|
||||||
|
# missing match key 'name' in data source 3 in list entry 3"
|
||||||
|
# }
|
||||||
|
|
||||||
|
- 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
|
||||||
|
name: 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 3"
|
||||||
|
# }
|
||||||
|
|
||||||
|
- 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
|
||||||
|
name: 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 3"
|
||||||
|
# }
|
||||||
|
|
||||||
##facts.yml
|
##facts.yml
|
||||||
|
|
||||||
|
|
|
@ -58,8 +58,242 @@ DOCUMENTATION = """
|
||||||
|
|
||||||
EXAMPLES = r"""
|
EXAMPLES = r"""
|
||||||
|
|
||||||
# Consolidated facts example
|
# Consolidated filter plugin example
|
||||||
# --------------------------
|
# ----------------------------------
|
||||||
|
|
||||||
|
##play.yml
|
||||||
|
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
|
||||||
|
name: values
|
||||||
|
- data: "{{ colors }}"
|
||||||
|
match_key: name
|
||||||
|
name: 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
|
||||||
|
name: sizes
|
||||||
|
data_sources: "{{ base_data + additional_data_source }}"
|
||||||
|
|
||||||
|
##Output
|
||||||
|
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "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
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
- 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
|
||||||
|
name: sizes
|
||||||
|
data_sources: "{{ base_data + additional_data_source }}"
|
||||||
|
|
||||||
|
##Output
|
||||||
|
|
||||||
|
# ok: [localhost] => {
|
||||||
|
# "ansible_facts": {
|
||||||
|
# "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
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# },
|
||||||
|
# "changed": false
|
||||||
|
# }
|
||||||
|
|
||||||
|
- 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
|
||||||
|
name: sizes
|
||||||
|
data_sources: "{{ base_data + additional_data_source }}"
|
||||||
|
|
||||||
|
##Output
|
||||||
|
|
||||||
|
# fatal: [localhost]: FAILED! => {
|
||||||
|
# "msg": "Error when using plugin 'consolidate': 'fail_missing_match_key'
|
||||||
|
# reported missing match key 'name' in data source 3 in list entry 1,
|
||||||
|
# missing match key 'name' in data source 3 in list entry 2,
|
||||||
|
# missing match key 'name' in data source 3 in list entry 3"
|
||||||
|
# }
|
||||||
|
|
||||||
|
- 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
|
||||||
|
name: 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 3"
|
||||||
|
# }
|
||||||
|
|
||||||
|
- 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
|
||||||
|
name: 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 3"
|
||||||
|
# }
|
||||||
|
|
||||||
##facts.yml
|
##facts.yml
|
||||||
|
|
||||||
|
@ -1216,10 +1450,6 @@ from ansible_collections.ansible.utils.plugins.module_utils.common.argspec_valid
|
||||||
AnsibleArgSpecValidator,
|
AnsibleArgSpecValidator,
|
||||||
)
|
)
|
||||||
|
|
||||||
# import debugpy
|
|
||||||
|
|
||||||
# debugpy.listen(3000)
|
|
||||||
# debugpy.wait_for_client()
|
|
||||||
try:
|
try:
|
||||||
from jinja2.filters import pass_environment
|
from jinja2.filters import pass_environment
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
|
|
@ -55,7 +55,13 @@ def fail_on_filter(validator_func):
|
||||||
any: Return value to the function call
|
any: Return value to the function call
|
||||||
"""
|
"""
|
||||||
res, err = validator_func(*args, **kwargs)
|
res, err = validator_func(*args, **kwargs)
|
||||||
if err:
|
if any(
|
||||||
|
[
|
||||||
|
err.get("fail_missing_match_key"),
|
||||||
|
err.get("fail_duplicate"),
|
||||||
|
err.get("fail_missing_match_value"),
|
||||||
|
]
|
||||||
|
):
|
||||||
_raise_error(err)
|
_raise_error(err)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[testgroup]
|
||||||
|
testhost ansible_connection="local" ansible_pipelining="yes" ansible_python_interpreter="/home/sagpaul/MyVnvs/dev39A212/bin/python"
|
|
@ -379,7 +379,7 @@ class TestConsolidate(unittest.TestCase):
|
||||||
with self.assertRaises(AnsibleFilterError) as error:
|
with self.assertRaises(AnsibleFilterError) as error:
|
||||||
_consolidate(*args)
|
_consolidate(*args)
|
||||||
self.assertIn(
|
self.assertIn(
|
||||||
"Error when using plugin 'consolidate': 'fail_missing_match_key' reported Missing match key 'name' in data source 3 in list entry 1",
|
"Error when using plugin 'consolidate': 'fail_missing_match_key' reported missing match key 'name' in data source 3 in list entry 1",
|
||||||
str(error.exception),
|
str(error.exception),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -516,6 +516,6 @@ class TestConsolidate(unittest.TestCase):
|
||||||
with self.assertRaises(AnsibleFilterError) as error:
|
with self.assertRaises(AnsibleFilterError) as error:
|
||||||
_consolidate(*args)
|
_consolidate(*args)
|
||||||
self.assertIn(
|
self.assertIn(
|
||||||
"Error when using plugin 'consolidate': 'fail_duplicate' reported Duplicate values in data source 3",
|
"Error when using plugin 'consolidate': 'fail_duplicate' reported duplicate values in data source 3",
|
||||||
str(error.exception),
|
str(error.exception),
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue