Conditionally running a filter in a chain

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

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).