Skip to main content

Raymii.org Logo (IEC resistor symbol)logo

Quis custodiet ipsos custodes?
Home | About | All pages | RSS Feed | Gopher

Ansible - Only if host is also in other hostgroup

Published: 25-11-2014 | Author: Remy van Elst | Text only version of this article


Table of Contents


This trick helps you execute actions only when a host is in another hostgroup inAnsible. For example, you might deploy munin-node via ansible, but you only wantyour apache and NGINX plugins deployed on your webservers, not on your databaseservers. I found this hard to find in the Ansible documentation, only in themailing list was more information.

This example playbook is rolled out to all the hosts (hosts: all), because allthe hosts are monitored via Munin. In my ansible-hosts file I also have twogroups, webservers and databaseservers. I only want my http-status pluginon the webservers, and the postgres-status plugin only on the datase servers.This is how you do that.

If you like this article, consider sponsoring me by trying out a Digital OceanVPS. With this link you'll get $100 credit for 60 days). (referral link)

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 thefile module, that creates a symlink as well.

By using the when: "'GROUP_NAME' in {{ group_names }}" statement in an actionyou get more control over the nodes specific actions are run on.

Tags: ansible, configuration-management, deployment, devops, munin, python, sudo, sudoers, tutorials, visudo