Manchmal möchte man ein Playbook bzw. Plays nur auf Hosts laufen lassen, welche gewissen Kriterien entsprechen. In diesem Beitrag möchte ich zwei Beispiele geben, wie sich dies umsetzen lässt.
Playbook nur auf Hosts mit Red Hat Betriebssystem ausführen
Das Modul group_by
[1] wird genutzt, um während des Laufs eines Playbooks dynamisch Gruppen von Hosts zu erstellen, auf welche man später weitere Plays anwendet.
--- - hosts: all tasks: - name: Group by OS group_by: key=os_{{ ansible_distribution }} changed_when: False - hosts: os_RedHat roles: - common
Zu Beginn eines Playbook-Laufs wird das Modul setup
[2] ausgeführt, um Variablen mit nützlichen Informationen über die Nodes zu belegen. Die Variable ansible_distribution
enthält dabei ein Schlüsselwort für eine bestimmte Distribution.
In obigen Beispiel wird dabei die Gruppe os_RedHat
erstellt. Im Folgenden werden dann alle Nodes dieser Gruppe der Rolle common
zugeordnet.
Dieses Verfahren lässt sich natürlich auch für weitere Variablen anwenden. Möchte man sehen, welche Variablen belegt werden und genutzt werden können, kann sich die Rückgabe von setup
in der Standardausgabe ansehen, wenn man das Modul manuell auf einigen Nodes ausführt.
Plays nur auf bestimmten Nodes ausführen
Ein weiteres Beispiel habe ich auf ITrig [4] gefunden:
--- - name: install open-vm-tools hosts: vmwareclients gather_facts: True become: true become_user: root tasks: - name: debian install open-vm-tools apt: name=open-vm-tools state=present when: ansible_os_family == "Debian" and ansible_virtualization_type == "VMware" - name: centos install open-vm-tools yum: name=open-vm-tools state=present when: ansible_os_family == "RedHat" or ansible_distribution == 'CentOS' and ansible_virtualization_type == "VMware"
Hier werden Ansible Conditionals [3] verwendet, um zu bestimmen, auf welchen Nodes ein Play ausgeführt wird. Auch hier werden wieder Variablen ausgewertet, welche durch das Modul setup
[2] belegt wurden.
In obigen Beispiel wird dies genutzt, um die open-vm-tools
mit einem Playbook sowohl auf Debian und RedHat/CentOS Systemen zu installieren.