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 nine 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:
I'm developing an open source monitoring app called Leaf Node Monitoring, for windows, linux & android. Go check it out!
Consider sponsoring me on Github. It means the world to me if you show your appreciation and you'll help pay the server costs.
You can also sponsor me by getting a Digital Ocean VPS. With this referral link you'll get $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.