Fixes keep_keys filter to retain the entire node when a key match occurs, rather than just the leaf node values. (#377)
* Fix keep_keys not keeping the values if they are not a string * added changelog * remove inventory * add tests * added more testpull/378/head
parent
c4ace98702
commit
d902c0f4f9
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
bugfixes:
|
||||||
|
- keep_keys - Fixes keep_keys filter to retain the entire node when a key match occurs, rather than just the leaf node values.
|
|
@ -37,7 +37,9 @@ def keep_keys_from_dict_n_list(data, target, matching_parameter):
|
||||||
for k, val in data.items():
|
for k, val in data.items():
|
||||||
match = False
|
match = False
|
||||||
for key in target:
|
for key in target:
|
||||||
if not isinstance(val, (list, dict)):
|
if k == key:
|
||||||
|
keep[k], match = val, True
|
||||||
|
elif not isinstance(val, (list, dict)):
|
||||||
if matching_parameter == "regex":
|
if matching_parameter == "regex":
|
||||||
if re.match(key, k):
|
if re.match(key, k):
|
||||||
keep[k], match = val, True
|
keep[k], match = val, True
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[testgroup]
|
||||||
|
testhost ansible_connection="local" ansible_pipelining="yes" ansible_python_interpreter="/home/roverflow/workspace/virtualvenvs/a216p312/bin/python"
|
|
@ -79,12 +79,19 @@
|
||||||
name: tomcat1
|
name: tomcat1
|
||||||
tomcat2:
|
tomcat2:
|
||||||
name: tomcat2
|
name: tomcat2
|
||||||
|
tomcat3:
|
||||||
|
name: tomcat3
|
||||||
tomcat3:
|
tomcat3:
|
||||||
name: tomcat3
|
name: tomcat3
|
||||||
|
tomcat4:
|
||||||
|
name: tomcat3
|
||||||
|
tomcat3:
|
||||||
|
tomcat3:
|
||||||
|
name: tomcattest
|
||||||
|
checktomcat3: stringinput
|
||||||
tomcats_block:
|
tomcats_block:
|
||||||
- tomcat1
|
- tomcat1
|
||||||
- tomcat2
|
- tomcat2
|
||||||
|
|
||||||
- name: Debug
|
- name: Debug
|
||||||
ansible.builtin.debug:
|
ansible.builtin.debug:
|
||||||
msg: "{{ tomcat_data | ansible.utils.keep_keys(target=['tomcats_block']) }}"
|
msg: "{{ tomcat_data | ansible.utils.keep_keys(target=['tomcats_block']) }}"
|
||||||
|
@ -94,3 +101,23 @@
|
||||||
ansible.builtin.assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- keep_tomcat['tomcat'] == result['msg']
|
- keep_tomcat['tomcat'] == result['msg']
|
||||||
|
|
||||||
|
- name: Test to keep keys when initial node is matched
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: "{{ tomcat_data['tomcat'] | ansible.utils.keep_keys(target=['tomcat1', 'tomcat2']) }}"
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Assert result dicts
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- keep_tomcat['greedy_values'] == result['msg']
|
||||||
|
|
||||||
|
- name: Test to keep keys to check if nested dict is matched
|
||||||
|
ansible.builtin.debug:
|
||||||
|
msg: "{{ tomcat_data['tomcat'] | ansible.utils.keep_keys(target=['tomcat3']) }}"
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Assert result dicts
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- keep_tomcat['nested_values'] == result['msg']
|
||||||
|
|
|
@ -28,3 +28,21 @@ keep_tomcat:
|
||||||
tomcats_block:
|
tomcats_block:
|
||||||
- tomcat1
|
- tomcat1
|
||||||
- tomcat2
|
- tomcat2
|
||||||
|
greedy_values:
|
||||||
|
tomcat1:
|
||||||
|
name: tomcat1
|
||||||
|
tomcat2:
|
||||||
|
name: tomcat2
|
||||||
|
tomcat3:
|
||||||
|
name: tomcat3
|
||||||
|
nested_values:
|
||||||
|
tomcat2:
|
||||||
|
tomcat3:
|
||||||
|
name: tomcat3
|
||||||
|
tomcat3:
|
||||||
|
name: tomcat3
|
||||||
|
tomcat4:
|
||||||
|
tomcat3:
|
||||||
|
tomcat3:
|
||||||
|
name: tomcattest
|
||||||
|
checktomcat3: stringinput
|
||||||
|
|
Loading…
Reference in New Issue