How to grab all hosts but the first, in Ansible
Today I learned (2019-03-20)
Today I was trying to figure out how to run a particular ansible play on one host out of a group, and another play on all the other hosts.
The answer was found in a mailing group posting from 2014, but in case that service goes down, here's my note-to-self on how to do it.
Let's say you have a group of hosts called
stateful_cluster_hosts in your
inventory. You'd like to upload
files/leader_script.sh.j2 to the first host,
files/follower_script.sh.j2 to all the others.
The play for the leader host would look like this:
- hosts: stateful_cluster_hosts tasks: - name: "Upload leader start script" template: src: files/leader_script.sh.j2 dest: start.sh mode: "u=rwx,g=rx,o=rx"
The play for the follower hosts would look like this:
- hosts: stateful_cluster_hosts:!stateful_cluster_hosts tasks: - name: "Upload follower start script" template: src: files/follower_script.sh.j2 dest: start.sh mode: "u=rwx,g=rx,o=rx"
Where the sytax
list:!list[idx] means take
list, but filter out