Hi,
Trying to do the following, and struggling to find a way to do this.
I build a list of strings, and want to conditionally append a string at the end of the list, but only if the variable is defined.
This works fine:
`
play_hosts | union([optional_ip])
`
Which appends optional_ip to play_hosts, however if optional_ip is not defined, I would like to simply drop the union filter… If I change it to:
play_hosts | union([optional_ip | default(None)])
It appends an empty string. I was hoping I could maybe use “or omit” after the union but can’t quite get that to work.
Any suggestions?
Thanks!
You could try to add a when to the task
when: optional_ip is defined
Daniel_JD
(Daniel JD)
August 26, 2017, 10:31am
3
Isn’t play_hosts a reserved ansible variable (deprecatd but still…). Maybe try another name.
Thanks Kai, that's one option for sure.
@Daniel - I'm using the Ansible play_hosts variable and optionally joining another IP to that existing list.
I like Kai’s suggestion and will likely end up breaking the tasks into multiple chunks using ‘when’. However for completeness’ sake, I also got the following to work:
play_hosts | union(optional_ip is defined | ternary([optional_ip], []))
(ie: union the variable if it’s defined, otherwise union empty list).