Looping over nested inventory items with conditional

Hey all,

We’re migrating from a single load balancer pair for all systems (dev/test/qa/prod) to separate pairs for dev/test and qa/prod. As a result, my previous task to pull nodes from the pool on the load balancer will no longer suffice without some conditional logic. I have a partial solution, but it two issues.

1st Issue
In the following code i’m attempting to make it so that if the server is in the test inventory group, it uses the dev-test f5 pair and if it’s not, use the qa-prod f5 pair. The first issue is that it loops over all combinations so the task would essentially execute twice for each f5 target.

https://pastebin.com/ZxkPqvPF

2nd Issue
The second problem is that i need to expand the conditional to allow multiple statements.

I need to find a way to expand this line:
msg: “{{ (inventory_hostname in groups[‘test’]) | ternary(hostvars[item[0]].ansible_host,hostvars[item[1]].ansible_host) }}”

into
msg: “{{ (inventory_hostname in groups[‘test’] OR inventory_hostname in groups[‘dev’]) | ternary(hostvars[item[0]].ansible_host,hostvars[item[1]].ansible_host) }}”

which doesn’t work currently.

I’m wondering if there’s a way to salvage this method or if i need another approach entirely. I’ve considered just hard coding the f5’s into a group_variable, but i’d like to avoid that and leverage the inventory instead if possible.

Thanks!

I’m not entirely sure of your constraints, but it seems like you would want something more like https://gist.github.com/flowerysong/ae18f75d2103b41198149380e8d6fb1c rather than a nested loop.

Thanks! that got me what I needed. I made this slight modification to the item piece and i’m good to go!

msg: “{{ hostvars[item].ansible_host }}”