mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-05-07 22:02:50 +00:00
[PR #9133/a789bd12 backport][stable-10] Add the accumulate filter (#9220)
Add the accumulate filter (#9133)
* Add the accumulate filter
- Add myself as a maintainer for it.
- Some integration tests.
* accumulate: fix documentation and add test aliases
The aliases file was copied over from
tests/integrations/targets/filter_dict/aliases as the documentation[1]
suggests to use the same group as existing similar tests.
[1]: https://docs.ansible.com/ansible/latest/dev_guide/testing/sanity/integration-aliases.html
Suggested-by: Felix Fontein <felix@fontein.de>
* accumulate: documentation: markup consistency with other plugins
Suggested-by: Felix Fontein <felix@fontein.de>
Suggested-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
* filter/accumulate: Validate input is a Sequence
Accepting arbitrary iterables might lead to surprising behavior so we
are stricter on what we accept in the filter.
Relaxing those requirements is easier than retrofitting them, in terms
of backwards compatibility.
Suggested-by: Felix Fontein <felix@fontein.de>
Signed-off-by: Max Gautier <mg@max.gautier.name>
* filter/accumulate: Document the behavior with a string
Signed-off-by: Max Gautier <mg@max.gautier.name>
---------
Signed-off-by: Max Gautier <mg@max.gautier.name>
(cherry picked from commit a789bd128f)
Co-authored-by: Max Gautier <mg@max.gautier.name>
This commit is contained in:
5
tests/integration/targets/filter_accumulate/aliases
Normal file
5
tests/integration/targets/filter_accumulate/aliases
Normal file
@@ -0,0 +1,5 @@
|
||||
# Copyright (c) Ansible Project
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
azp/posix/3
|
||||
35
tests/integration/targets/filter_accumulate/tasks/main.yml
Normal file
35
tests/integration/targets/filter_accumulate/tasks/main.yml
Normal file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
# Copyright (c), Max Gautier <mg@max.gautier.name>
|
||||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
- name: Filter | Accumulate | Test valid values
|
||||
assert:
|
||||
that:
|
||||
- "'abc' | community.general.accumulate == ['a', 'ab', 'abc']"
|
||||
- "['a', 'b'] | community.general.accumulate == ['a', 'ab']"
|
||||
- "[1, 2, 3] | community.general.accumulate == [1, 3, 6]"
|
||||
- "[['foo'],['bar'],['foobar']] | community.general.accumulate == [['foo'], ['foo', 'bar'], ['foo', 'bar', 'foobar']]"
|
||||
- "'path/to/file' | split('/') | map('split', '/') | community.general.accumulate | map('join', '/') == ['path', 'path/to', 'path/to/file']"
|
||||
- "[{'foo':1}, {'bar':2}] | map('dict2items') | community.general.accumulate | map('items2dict') == [{'foo':1}, {'foo':1, 'bar':2}]"
|
||||
|
||||
|
||||
- name: Filter | Accumulate | Test invalid values | Integer
|
||||
debug:
|
||||
var: "1 | community.general.accumulate"
|
||||
register: integer_result
|
||||
ignore_errors: true
|
||||
|
||||
- name: Filter | Accumulate | Test invalid values | Non uniform list
|
||||
debug:
|
||||
var: "['aa', 1] | community.general.accumulate"
|
||||
register: non_uniform_list_result
|
||||
ignore_errors: true
|
||||
|
||||
- name: Filter | Accumulate | Test invalid values | Check errors
|
||||
assert:
|
||||
that:
|
||||
- integer_result is failed
|
||||
- integer_result.msg is match('Invalid value type.*')
|
||||
- non_uniform_list_result is failed
|
||||
- non_uniform_list_result.msg is match('Unexpected templating type error.*can only concatenate str.*')
|
||||
Reference in New Issue
Block a user