I have an inventory of hosts, and from them, one of the tasks should choose a leader by running a command on each until one of the machines produces an expected output (json value.)

I want some code to run on that leader to initialize it, and then I want some of the other roles to delegate some tasks to that leader.

Not sure how to do this?

Should I use dynamic inventory to analyze a group of hosts, and create a new group (can you run built_in.command in dynamic inventory? Should I write a role task that runs the identifying command on each host, capturing the result globally if it returns what I want (but then running on each host even if I have found my leader?)

You are viewing a single thread.
View all comments View context
1 point

Me either, but we have a role to bootstrap galara mysql and we just use the first host in a group

permalink
report
parent
reply
1 point

sounds like the same idea. So you use run_once on a task?

permalink
report
parent
reply
1 point

I thought that there might be a way to a custom facts (gather_facts) to all machines, and indicate leader/joiner status there, but I can’t get the data to stick.

permalink
report
parent
reply
0 points
*

I think the idea to register the leader status during a dedicated task like Matt said is the better move.

You got this module if you want to create dynamic group during play :

https://docs.ansible.com/ansible/latest/collections/ansible/builtin/add_host_module.html

And during gather_facts, you could add your own custom facts :

https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_vars_facts.html#adding-custom-facts

Bash script example returning json :

#!/bin/bash
leader_status=$(curl http://127.0.0.1/leader_status)
echo {\"leader\" : \"${leader_status}\"}
permalink
report
parent
reply

Ansible

!ansible@lemmy.world

Create post

# TODO

Community stats

  • 2

    Monthly active users

  • 9

    Posts

  • 24

    Comments

Community moderators