Raymii.org
Quis custodiet ipsos custodes?Home | About | All pages | Cluster Status | RSS Feed
Ansible - Only if host is also in other hostgroup
Published: 25-11-2014 | Author: Remy van Elst | Text only version of this article
❗ This post is over ten years old. It may no longer be up to date. Opinions may have changed.
This trick helps you execute actions only when a host is in another hostgroup in Ansible. For example, you might deploy munin-node via ansible, but you only want your apache and NGINX plugins deployed on your webservers, not on your database servers. I found this hard to find in the Ansible documentation, only in the mailing list was more information.
This example playbook is rolled out to all the hosts (hosts: all
), because all
the hosts are monitored via Munin. In my ansible-hosts file I also have two
groups, webservers
and databaseservers
. I only want my http-status
plugin
on the webservers, and the postgres-status
plugin only on the datase servers.
This is how you do that.
Recently I removed all Google Ads from this site due to their invasive tracking, as well as Google Analytics. Please, if you found this content useful, consider a small donation using any of the options below. It means the world to me if you show your appreciation and you'll help pay the server costs:
GitHub Sponsorship
PCBWay referral link (You get $5, I get $20 after you've placed an order)
Digital Ocea referral link ($200 credit for 60 days. Spend $25 after your credit expires and I'll get $25!)
Sample from the playbook:
- name: Deploy munin http status code plugin
copy:
src: files/http-status
dest: /usr/share/munin/plugins/http-status.sh
owner: root
group: root
mode: 0755
- name: Deploy postgres status plugin
copy:
src: files/postgres-status
dest: /usr/share/munin/plugins/posgres-status.py
owner: root
group: root
mode: 0755
- name: Link munin apache plugin
command: ln -sf /usr/share/munin/plugins/http-status /etc/munin/plugins/http-status
when: "'webservers' in {{ group_names }}"
- name: Link munin postgres plugin
command: ln -sf /usr/share/munin/plugins/postgres-status.py /etc/munin/plugins/postgres-status
when: "'databaseservers' in {{ group_names }}"
In newer versions of Ansible you would replace the symlink command with the
file
module, that creates a symlink as well.
By using the when: "'GROUP_NAME' in {{ group_names }}"
statement in an action
you get more control over the nodes specific actions are run on.