Meine Top 4 Ansible Module

Durch meine zahlreichen Ansible Beiträge sollte bereits klar geworden sein, dass ich dieses Tool gerne und häufig nutze. Eine der großen Stärken von Ansible ist die unglaubliche Vielfalt an Modulen die es mittlerweile gibt, sowohl Herstellerseitig, als auch aus der Community.
In diesem Beitrag soll es nun um meine persönliche Top 4 der Ansible-Module gehen, die ich als am nützlichen betrachte und am liebsten benutze.

ansible.builtin.apt / ansible.builtin.yum

Selbstverständlich wurde den beiden prominenten Paketverwaltungs-Tools APT und YUM, genannt ansible.builtin.apt bzw. ansible.builtin.yum, ein eigenes Ansible-Modul spendiert. Mit ihrer Hilfe ist es nicht nur möglich, die Zielmaschinen auf dem neuesten Update-Stand zu halten, sondern auch neue Pakete zu installieren oder zu deinstallieren. Dabei beinhalten diese Module auch auch noch zahlreiche weitere Funktionen, wie die Auffrischung des Paket-Caches (update_cache: yes), die Löschung nicht mehr benötigter Abhängigkeiten (autoremove: yes), die Installation bestimmter Programmversionen (name: nginx=1.18.0) oder die Verwendung spezieller Repository-Ressourcen (deb: https://example.com/python-ppq_0.1-1_all.deb). Dabei ist die YAML-Syntax beider Module tatsächlich identisch, lediglich die einleitende Angabe des Modul-Namens unterscheidet sich logischerweise.
Als einziger Wermutstropfen ist mir aufgefallen, dass es mit keinem der beiden Modulen möglich, ein komplettes Betriebssystem-Upgrade (also beispielsweise die Aktualisierung der LTS Version) durchzuführen. Dies würde aber wohl ohnehin den Rahmen der Funktionalität sprengen.

Es folgt eine Beispiel-Syntax zur Installation zweier Pakete mit aktualisiertem Pakete-Cache:

### Für APT

- name: Install a list of packages
  ansible.builtin.apt:
    pkg:
    - foo
    - foo-tools
    update_cache: yes

### Für YUM
- name: Install a list of packages
  ansible.builtin.yum:
    pkg:
    - foo
    - foo-tools
    update_cache: yes

Link zur Dokumentation:
APT: https://docs.ansible.com/ansible/latest/collections/ansible/builtin/apt_module.html
YUM: https://docs.ansible.com/ansible/9/collections/ansible/builtin/yum_module.html

ansible.builtin.user

Die Benutzerverwaltung darf natürlich auch bei Ansible nicht zu kurz kommen und so hält das Modul ansible.builtin.user ein paar schöne Funktionen für uns parat. Neben dem gewöhnlichen Anlegen eines Benutzers samt Gruppenzugehörigkeit (groups: admins,developers / append: yes), UID / GID und Login-Shell (shell: /bin/bash) können wir dem System auch gleich noch mitgeben, dass dieser Account doch bitte nur einen bestimmten Zeitraum gültig sein soll (expires: 1422403387 -> Das ist diese komische Unix-Time Schreibweise) und der Benutzer ein paar Tage vor Ablauf seiner Frist doch bitte zuvor noch gewarnt werden soll (password_expire_warn: 30). Eine besonders tolle Funktion ist außerdem die Setzung eines neuen Passwortes:

- name: Set new password for user urmel
  ansible.builtin.user:
    name: urmel
    update_password: always
    password: "{{ newpassword|password_hash('sha512') }}"

### Anschließend ruft ihr das Playbook in etwa folgendermaßen auf:
ansible-playbook ./<Name des Playbooks> --extra-vars newpassword='neues_passwort'

Das Anlegen eines neuen Benutzers urmel, samt Kommentar, spezieller UID und der primären Gruppe admin mit Hilfe dieses Moduls sähe folgendermaßen aus:

- name: Add the user 'johnd' with a specific uid and a primary group of 'admin'
  ansible.builtin.user:
    name: urmel
    comment: Dies ist einfach nur irgendein Kommentar zum Benutzer
    uid: 1040
    group: admin

Link zur Dokumentation:
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/user_module.html

community.general.ufw

In einem der vorangegangenen Beiträgen bin ich auf die Administration der UFW (uncomplicated firewall) eingegangen. Ansible hält auch hierfür ein (Community-)Modul bereit. Mit dessen Hilfe können wir im Handumdrehen ganze Firewall-Konfigurationen ausrollen. Dies inkludiert die Aktivierung der Firewall (state: enabled), und dem zulassen (policy: allow) oder verweigern (policy: deny) sämtlichen Datenverkehrs. Limitierungen der Login-Anzahl innerhalb kürzester Zeit lassen sich einrichten (rule: limit / port: ssh / proto: tcp) um beispielsweise Brute-Force Attacken vorzubeugen. Natürlich sind auf die Grundfunktionen enthalten, wie das zulassen oder blockieren einzelner Ports (rule: allow bzw. rule: deny / port: 22) und in welche Richtung diese Restriktion geschehen soll (direction: in bzw. direction: out).
Als kleiner Tipp noch am Rande: Falls ihr mehrere Ports in einem Block zulassen oder blockieren wollt gibt es die Möglichkeit eine Schleife anzuwenden:

- name: Enable some ports
  community.general.ufw:
    rule: allow
    port: '{{ item }}'
    proto: typ
loop:
  - '22'
  - '443'

Link zur Dokumentation:
https://docs.ansible.com/ansible/latest/collections/community/general/ufw_module.html

ansible.builtin.shell

Durch die endlose Anzahl an Anwendungsfällen im Linux-Umfeld, kann es unmöglich ein Modul für jede zu erledigende Aufgabe geben. Deswegen möchte ich zu guter Letzt noch ein nützliches wie simples Modul vorstellen, welches nichts anderes macht, als einfach nur Shell-Befehle auf der Zielmaschine auszuführen. Das ansible.builtin.shell dabei nicht allzu viele Optionen bietet, stört dabei wenig. Wir können vor Ausführung des Befehls lediglich noch in ein anderes Verzeichnis wechseln (chdir: somedir/), den Befehl nur dann ausführen, wenn auch eine bestimmte Datei existiert (creates: somelog.txt) oder die Shell mitgeben, die den Befehl ausführen soll (executable: /bin/bash).

- name: Lade und wende Kernel-Parameter aus der Datei '/etc/sysctl.conf' an und verwende dabei die Bash-Shell
  ansible.builtin.shell: sysctl -p /etc/sysctl.conf
    args:
      executable: /bin/bash

Link zur Dokumentation:
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/shell_module.html

Bildquellen:
Bild von OpenClipart-Vectors auf Pixabay

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen