Anwendung von ansible-lint

In diesem Beitrag zeige ich dir, wie du ansible-lint verwendest, um die Qualität und Wartbarkeit deiner Ansible Playbooks zu verbessern. Das Tool ansible-lint überprüft Playbooks auf Best Practices, potenzielle Fehler und unkonventionellen Code, um sicherzustellen, dass sie den Ansible-Richtlinien entsprechen.

Warum ansible-lint?

ansible-lint ist ein statisches Analysetool, das entwickelt wurde, um deine Ansible-Playbooks auf häufige Probleme und schlechte Praktiken zu überprüfen. Es hilft dir, deine Playbooks sauber und effizient zu halten, indem es:

  • Best Practices sicherstellt.
  • Auf potenzielle Fehler oder Sicherheitsprobleme hinweist.
  • Den Code konsistent und wartbar macht.

Durch die Anwendung von ansible-lint kannst du qualitativ hochwertige Playbooks schreiben, die einfacher zu pflegen und zu skalieren sind.

Voraussetzungen

Um mit ansible-lint zu arbeiten, benötigst du:

  • Ansible: Stelle sicher, dass Ansible installiert ist.
  • ansible-lint: Dieses Tool kannst du über pip installieren:
pip install ansible-lint

1. Schritt: Ein einfaches Playbook erstellen

Lass uns mit einem einfachen Ansible-Playbook beginnen, das einige Probleme enthält, die ansible-lint erkennen kann.

Erstelle eine Datei namens problem_playbook.yml:

---
- hosts: all
  tasks:
    - name: Installiere Apache
      apt: pkg=apache2 state=present
      become: yes

    - name: Starte den Apache-Dienst neu
      command: systemctl restart apache2
      become: yes

Dieses Playbook enthält einige potenzielle Probleme:

  1. Der apt-Modul-Aufruf verwendet alte Argumentnotation (pkg statt name).
  2. Anstatt das spezifische service-Modul zu verwenden, wird hier der command-Modul-Aufruf für den Neustart des Apache-Dienstes verwendet.

2. Schritt: ansible-lint ausführen

Um das Playbook zu überprüfen, führe ansible-lint in dem Verzeichnis aus, in dem sich dein Playbook befindet:

ansible-lint problem_playbook.yml

Du erhältst eine Ausgabe, die ähnlich wie folgt aussieht:

[206] Variables should have spaces before and after: {{ var_name }}
problem_playbook.yml:7
Task/Handler: Installiere Apache

[502] All tasks should be named
problem_playbook.yml:10

[301] Using command rather than an explicit module
problem_playbook.yml:10
Task/Handler: Starte den Apache-Dienst neu

[306] Shells should not be used to start services
problem_playbook.yml:10
Task/Handler: Starte den Apache-Dienst neu

3. Schritt: Analyse der Ausgaben

ansible-lint hat mehrere Probleme in unserem Playbook erkannt:

  1. Veraltete Variablen-Notation: apt: pkg=apache2 sollte durch apt: name=apache2 ersetzt werden. Ansible empfiehlt, die name-Option zu verwenden, da sie aussagekräftiger und konsistenter ist.
  2. Verwendung des command-Moduls: Das command-Modul sollte nicht für den Neustart von Diensten verwendet werden. Es gibt spezielle Module wie service, die für solche Aufgaben gedacht sind.

4. Schritt: Playbook korrigieren

Lass uns das Playbook auf Basis der Hinweise von ansible-lint verbessern.

Ersetze den Inhalt von problem_playbook.yml durch Folgendes:

---
- hosts: all
  tasks:
    - name: Installiere Apache
      apt:
        name: apache2
        state: present
      become: yes

    - name: Stelle sicher, dass Apache läuft
      service:
        name: apache2
        state: restarted
      become: yes

5. Schritt: Nochmalige Überprüfung

Nachdem wir die Änderungen vorgenommen haben, führen wir ansible-lint erneut aus:

ansible-lint problem_playbook.yml

Wenn alles korrekt ist, wird keine Fehlerausgabe mehr angezeigt. Das Playbook ist nun fehlerfrei und entspricht den Best Practices.

6. Erweiterte Optionen von ansible-lint

ansible-lint bietet viele nützliche Optionen, um deinen Workflow zu verbessern:

  • Überprüfe alle Playbooks im Verzeichnis:
ansible-lint .
  • Konfiguriere benutzerdefinierte Regeln: Du kannst eine .ansible-lint-Konfigurationsdatei erstellen, um Regeln zu deaktivieren, eigene Regeln hinzuzufügen oder Verzeichnisse auszuschließen.

Beispiel .ansible-lint-Datei:

skip_list:
  - 301  # Skip "Use command instead of specific module"
  - 206  # Skip "Variables should have spaces"
  • CI/CD-Integration: Du kannst ansible-lint in deine Continuous-Integration-Pipeline einbinden, um sicherzustellen, dass alle Playbooks den Best Practices entsprechen, bevor sie in Produktion gehen.

7. Schritt: Integration in den Workflow

Um ansible-lint sinnvoll in deinen Workflow zu integrieren, solltest du es regelmäßig ausführen:

  • Vor jedem Commit: Führe ansible-lint lokal aus, bevor du Änderungen an deinen Playbooks in ein Versionskontrollsystem (z.B. Git) überträgst.
  • Automatische Überprüfung in der CI-Pipeline: Stelle sicher, dass Playbooks während des Build-Prozesses auf Qualität geprüft werden.

Fazit

ansible-lint ist ein unverzichtbares Tool, um sicherzustellen, dass deine Ansible-Playbooks sauber, effizient und den Best Practices entsprechend geschrieben sind. Mit ansible-lint kannst du nicht nur potenzielle Fehler frühzeitig erkennen, sondern auch langfristig konsistenten, wartbaren Code gewährleisten. Durch die Einbindung in deinen täglichen Workflow oder CI/CD-Prozess verbesserst du die Qualität deiner Automatisierungsinfrastruktur erheblich.

Viel Erfolg beim Linten deiner Ansible-Playbooks!

Schreibe einen Kommentar

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