Nested Loops? Sorting inventory_hostnames

I have a custom hostvar called server_dependson defined in my inventory. The thinking is that each server will have a server it is dependent on.
Therefore when running updates and rebooting (Windows servers) I want to be able to specify that certain servers be updated and rebooted based on dependency.

My initial thought was to have a nested loop, outer loop with inventory_hostname and inner with server_dependson. Within the loop it would compare the server_dependson with the current inventory_hostname from the outer loop. If it matched then it would add the inventory_hostname to a list after the server it depended on. This way at the end of the loops I would have a sorted list of servers to feed to tasks in the list’s order.

Any ideas about how to achieve this?

Hi Mike,

I’m curious what problem you are solving by making each server dependent on another one. Maybe worth taking a step back and asking what problem you are solving by doing this?

I’d probably look at creating some dynamic inventory if I had to do this, although I would be surprised if every server wound up being dependent on another for all hosts in an inventory. But, like I say, I don’t know what problem you are solving.

Jon

Hi Jon,

We do currently use a dynamic inventory. Basically with the Windows domain servers we have instances where an application server would depend on a database server that would rely on a domain controller. In that example we would want a certain order of update and reboot.

Thanks.

Personally I think I’d shy away from coupling this relationship in the inventory but instead use groups and enforce the order by having multiple plays in a given playbook (something like the following), but whatever works for you.

reboot_stuff_playbook.yml - NOT tested, just to illustrate idea