mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
468b28bbb8
* Add counter filter
* move counter filter doc to existing chapter
* Use existing typerror exception from Counter
* Match counter filter example task name and output
(cherry picked from commit 9642a15d34
)
Co-authored-by: Rémy Keil <remy.keil@gmail.com>
36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright (c) 2021, Remy Keil <remy.keil@gmail.com>
|
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
|
|
from __future__ import (absolute_import, division, print_function)
|
|
__metaclass__ = type
|
|
|
|
from ansible.errors import AnsibleFilterError
|
|
from ansible.module_utils.common._collections_compat import Sequence
|
|
from collections import Counter
|
|
|
|
|
|
def counter(sequence):
|
|
''' Count elements in a sequence. Returns dict with count result. '''
|
|
if not isinstance(sequence, Sequence):
|
|
raise AnsibleFilterError('Argument for community.general.counter must be a sequence (string or list). %s is %s' %
|
|
(sequence, type(sequence)))
|
|
|
|
try:
|
|
result = dict(Counter(sequence))
|
|
except TypeError as e:
|
|
raise AnsibleFilterError(
|
|
"community.general.counter needs a sequence with hashable elements (int, float or str) - %s" % (e)
|
|
)
|
|
return result
|
|
|
|
|
|
class FilterModule(object):
|
|
''' Ansible counter jinja2 filters '''
|
|
|
|
def filters(self):
|
|
filters = {
|
|
'counter': counter,
|
|
}
|
|
|
|
return filters
|