In Ansible ist ein Handler genau wie jede andere Aufgabe, wird aber nur ausgeführt, wenn er aufgerufen oder benachrichtigt wird. Es wird aktiv, wenn auf dem verwalteten Host eine Änderung vorgenommen wurde. Handler werden zum Initiieren einer sekundären Änderung verwendet, z. B. zum Starten oder Neustarten eines Dienstes nach der Installation oder sogar zum erneuten Laden eines Dienstes, nachdem einige Änderungen an den Konfigurationsdateien vorgenommen wurden. In diesem Leitfaden werden wir mehr Licht auf Ansible-Handler werfen. Wir werden lernen, wie man Handler im Ansible Playbook verwendet.
Ansible Playbook-Datei mit einem Handler
Um besser zu verstehen, wie Handler funktionieren, nehmen wir ein Beispiel für eine Playbook-Datei – install_apache.yml – die den Apache-Webserver installiert und später den Apache-Dienst neu startet. Im folgenden Beispiel wird der Handler benachrichtigt, den Apache-Dienst bald nach der Installation neu zu starten. Dies wird wie gezeigt mit dem Notify-Modul erreicht. Beachten Sie, dass der „Notify“-Name wie erwähnt mit dem Handler-Namen übereinstimmen sollte, da Sie sonst auf Fehler in Ihrer Playbook-Datei stoßen.
--- - hosts: staging name: Install become: yes tasks: - name: Install Apache2 on Ubuntu server apt: name: apache2 state: present update_cache: yes notify: - Restart apache2 handlers: - name: Restart apache2 service: name: apache2 state: restarted
Lassen Sie uns nun die Playbook-Datei ausführen.
$ ansible-playbook /etc/ansible/install_apache.yml -K
Aus der Ausgabe können Sie sehen, dass der Handler direkt nach der Aufgabe ausgeführt wird.
Mehrere Aufgaben mit mehreren Handlern
Darüber hinaus können wir mehrere Aufgaben haben, die mehrere Handler aufrufen. Betrachten Sie die Playbook-Datei unten.
Hier müssen 2 Aufgaben ausgeführt werden:
- Installieren des Apache-Webservers
- Zulassen von HTTP-Datenverkehr auf der UFW-Firewall.
Nachdem die Aufgaben erfolgreich ausgeführt wurden, habe ich jeden der Handler mit dem Modul „benachrichtigen“ aufgerufen, wie unten gezeigt. Der erste Handler startet Apache neu und der zweite lädt die UFW-Firewall neu.
--- - hosts: staging name: Install become: yes tasks: - name: Install Apache2 on Ubuntu server apt: name: apache2 state: present update_cache: yes - name: Allow HTTP traffic on UFW firewall ufw: rule: allow port: http proto: tcp notify: - Restart apache2 - Reload ufw firewall handlers: - name: Restart apache2 service: name: apache2 state: restarted - name: Reload ufw firewall ufw: state: enabled
Wenn die Playbook-Datei ausgeführt wird, werden beide Handler direkt nach der Installation von Apache von Ansible ausgeführt und HTTP-Datenverkehr wird auf der Firewall zugelassen.
Die sekundären Aktionen, die hier von den Handlern ausgeführt werden, sind:
- Apache neu starten
- Firewall aktivieren und neu laden, damit die vorgenommenen Änderungen wirksam werden.
Schlussfolgerung
Wie Sie gesehen haben, sind Handler genau wie normale Aufgaben, nur dass auf sie mit einem global eindeutigen Modul namens „notify“ verwiesen wird. Wenn ein Handler nicht benachrichtigt wird, kann er nicht ausgeführt werden. Denken Sie daran, dass alle Handler ausgeführt werden, nachdem alle Aufgaben abgeschlossen wurden.
Auch lesen : So erstellen Sie Ansible-Rollen und verwenden sie im Playbook