Commit 3ba516ac by Michael Peters Committed by Michael DeHaan

adding min() and max() filters for use in Jinja templates

parent 2d2178f2
...@@ -180,6 +180,20 @@ Jinja2 provides a useful 'default' filter, that is often a better approach to fa ...@@ -180,6 +180,20 @@ Jinja2 provides a useful 'default' filter, that is often a better approach to fa
In the above example, if the variable 'some_variable' is not defined, the value used will be 5, rather than an error In the above example, if the variable 'some_variable' is not defined, the value used will be 5, rather than an error
being raised. being raised.
.. _list_filters:
List Filters
--------------------
.. versionadded:: 1.7
To get the minimum value from list of numbers::
{{ list1 | min }}
To get the maximum value from a list of numbers::
{{ [3, 4, 2] | max }}
.. _set_theory_filters: .. _set_theory_filters:
Set Theory Filters Set Theory Filters
......
...@@ -183,6 +183,14 @@ def union(a, b): ...@@ -183,6 +183,14 @@ def union(a, b):
c = unique(a + b) c = unique(a + b)
return c return c
def min(a):
_min = __builtins__.get('min')
return _min(a);
def max(a):
_max = __builtins__.get('max')
return _max(a);
def version_compare(value, version, operator='eq', strict=False): def version_compare(value, version, operator='eq', strict=False):
''' Perform a version comparison on a value ''' ''' Perform a version comparison on a value '''
op_map = { op_map = {
...@@ -289,6 +297,8 @@ class FilterModule(object): ...@@ -289,6 +297,8 @@ class FilterModule(object):
'difference': difference, 'difference': difference,
'symmetric_difference': symmetric_difference, 'symmetric_difference': symmetric_difference,
'union': union, 'union': union,
'min' : min,
'max' : max,
# version comparison # version comparison
'version_compare': version_compare, 'version_compare': version_compare,
......
...@@ -175,3 +175,11 @@ class TestFilters(unittest.TestCase): ...@@ -175,3 +175,11 @@ class TestFilters(unittest.TestCase):
self.assertTrue(ansible.runner.filter_plugins.core.version_compare(1.0, 1.1, '<=')) self.assertTrue(ansible.runner.filter_plugins.core.version_compare(1.0, 1.1, '<='))
self.assertTrue(ansible.runner.filter_plugins.core.version_compare('12.04', 12, 'ge')) self.assertTrue(ansible.runner.filter_plugins.core.version_compare('12.04', 12, 'ge'))
def test_min(self):
a = ansible.runner.filter_plugins.core.min([3, 2, 5, 4])
assert a == 2
def test_max(self):
a = ansible.runner.filter_plugins.core.max([3, 2, 5, 4])
assert a == 5
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment