adds support for null values to the ternary filter (#45303)

* adds support for null values to the ternary filter

This change adds a third optional argument to the ternary filter to
handle a null value.  If the third option is specified null and false
are treated differently.

For instance, take the following example:

{{ enabled | ternary('no shutdown', 'shutdown') }}

If enabled == True, then 'no shutdown' is used.
If enabled in (False, None), then 'shutdown' is used.

With this change the following is possible:

{{ enabled | ternary('no shutdown', 'shutdown', omit) }}

If enabled == True, then 'no shutdown'
If enabled == False, then 'shutdown'
If enabled == None, then omit

* update documentation with example of filter

* update filter documentation example per comments

* fix logic error in user_guide example
This commit is contained in:
Peter Sprygada 2018-09-24 18:57:19 -04:00 committed by ansibot
parent 24b4633481
commit 1e68881c40
2 changed files with 8 additions and 2 deletions

View file

@ -1081,6 +1081,10 @@ To use one value on true and another on false (new in version 1.9)::
{{ (name == "John") | ternary('Mr','Ms') }}
To use one value on true, one value on false and a third value on null (new in version 2.8)::
{{ enabled | ternary('no shutdown', 'shutdown', omit) }}
To concatenate a list into a string::
{{ list | join(" ") }}

View file

@ -178,9 +178,11 @@ def regex_search(value, regex, *args, **kwargs):
return items
def ternary(value, true_val, false_val):
def ternary(value, true_val, false_val, none_val=None):
''' value ? true_val : false_val '''
if bool(value):
if value is None and none_val is not None:
return none_val
elif bool(value):
return true_val
else:
return false_val