Skip to content

Instantly share code, notes, and snippets.

@halberom
Last active May 19, 2021 03:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save halberom/d688085165c72bd8dfb9e94a44449af7 to your computer and use it in GitHub Desktop.
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.
---
- 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
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