Last active
May 19, 2021 03:15
-
-
Save halberom/d688085165c72bd8dfb9e94a44449af7 to your computer and use it in GitHub Desktop.
ansible - example of appending to list one or more vars and handling '' or undefined.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
- hosts: localhost | |
connection: local | |
gather_facts: false | |
vars: | |
mylist: | |
- one | |
- two | |
- three | |
myvar1: foo | |
myvar2: bar | |
myvar3: '' | |
# myvar4: | |
listofvars: | |
- myvar1 | |
- myvar2 | |
- myvar3 | |
- myvar4 | |
tasks: | |
# these are all equivalent | |
# select('ne', '') is equivalent to reject('eq', '') | |
- name: using default per var and filtering out '' with select or reject filter | |
set_fact: | |
newlist1: "{{ (mylist + [myvar1|default('', true)] + [myvar2|default('', true)] + [myvar3|default('', true)] + [myvar4|default('', true)])|select('ne', '')|list }}" | |
# |default('', true) is equivalent to (var is defined)|ternary([var],['']) | |
- name: using ternary per var (instead of default) and filtering out '' | |
set_fact: | |
newlist2: "{{ (mylist + (myvar1 is defined)|ternary([myvar1],[]) + (myvar2 is defined)|ternary([myvar2],[]) + (myvar3 is defined)|ternary([myvar3],[]) + (myvar4 is defined)|ternary([myvar4],[]))|select('ne', '')|list }}" | |
- name: using loop against static list of vars | |
set_fact: | |
newlist3: "{{ newlist3|default(mylist) + [item] }}" | |
when: item != '' | |
loop: "{{ [myvar1, myvar2, myvar3, myvar4]|select('defined')|list }}" | |
# select('defined')|select('ne', '') is equivalent to reject('undefined')|reject('eq', '') | |
- name: using select or reject filters only | |
set_fact: | |
newlist4: "{{ newlist4|default(mylist) + [myvar1, myvar2, myvar3, myvar4]|select('defined')|select('ne', '')|list }}" | |
- name: using loop against dynamic list of vars | |
set_fact: | |
newlist5: "{{ newlist5|default(mylist) + [lookup('vars', item, default='')]|select('ne', '')|list }}" | |
loop: "{{ listofvars }}" | |
- debug: | |
var: newlist5 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
PLAY [localhost] *********************************************************************************************************************************************************************************************************************************************************************************************************************************************************** | |
TASK [using default per var and filtering out '' with select or reject filter] ********************************************************************************************************************************************************************************************************************************************************************************************* | |
ok: [localhost] | |
TASK [using ternary per var (instead of default) and filtering out ''] ***************************************************************************************************************************************************************************************************************************************************************************************************** | |
ok: [localhost] | |
TASK [using loop against static list of vars] ****************************************************************************************************************************************************************************************************************************************************************************************************************************** | |
ok: [localhost] => (item=foo) | |
ok: [localhost] => (item=bar) | |
skipping: [localhost] => (item=) | |
TASK [using select or reject filters only] ********************************************************************************************************************************************************************************************************************************************************************************************************************************* | |
ok: [localhost] | |
TASK [using loop against dynamic list of vars] ***************************************************************************************************************************************************************************************************************************************************************************************************************************** | |
ok: [localhost] => (item=myvar1) | |
ok: [localhost] => (item=myvar2) | |
ok: [localhost] => (item=myvar3) | |
ok: [localhost] => (item=myvar4) | |
TASK [debug] *************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** | |
ok: [localhost] => { | |
"newlist5": [ | |
"one", | |
"two", | |
"three", | |
"foo", | |
"bar" | |
] | |
} | |
PLAY RECAP ***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** | |
localhost : ok=6 changed=0 unreachable=0 failed=0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment