Ansible Rollen testen mit Molecule
Einer der Vorzüge des Configuration Management Tools Ansible ist der einfach zu lesende sowie zu schreibende Code in YAML. Dazu gehört die Möglichkeit, den Code unkompliziert zu testen.
Je nach Umfang der geschriebenen Rollen ist eine direkte Ausführung auf dem Entwicklungsgerät nicht empfehlenswert. Ebenso sollten Tests von neu geschriebenem Code nicht auf der Produktivumgebung ausgeführt werden. Daher bietet sich ein Testsystem an.
Eine der Best Practices bei Ansible ist, zusammengehörende Tasks in Rollen zu strukturieren und parametrisierbar zu halten. Dadurch kann der Code auf unkomplizierte Art und Weise wiederverwendet werden. Zum Test der Funktionalität und der Eigenständigkeit einer Rolle bietet sich das mittlerweile vom Ansible Core Team entwickelte „Ansible Molecule“ an. Hier wird die Rolle standardmäßig auf einem lokal laufenden Docker-Container ausgeführt. Alternativ besteht die Möglichkeit des Tests in einer Vagrantbox oder bei diversen Cloud Providern lauf zu lassen.
Molecule basiert größtenteils auf Ansible. Dementsprechend werden auch die bei Ansible mitgelieferten providerspezifischen Module zum Provisionieren der Testinstanzen verwendet.
Beispiel:
Um eine bereits bestehende Rolle mit Ansible zu testen, muss zuerst ein Szenario erstellt werden:
molecule init scenario -r my-role-name
In molecule/default/ befindet sich die primäre Konfigurationsdatei molecule.yml, die zum Beispiel so aussehen kann:
dependency: name: galaxy options: role-file: requirements.yaml driver: name: docker lint: name: yamllint platforms: - name: c6 image: centos:6 - name: c7 image: centos:7 - name: d10 image: debian:10 provisioner: name: ansible lint: name: ansible-lint verifier: name: testinfra lint: name: flake8
Molecule prüft auch Abhängigkeiten, die vor der Ausführung vorhanden sein müssen. Dazu wird standardmäßig ansible-galaxy verwendet. Dafür kann man eine requirements.yml angeben, in der die erforderlichen Ansible Galaxy Rollen aufgelistet sind. Falls für die verwendeten Module und Plugins bestimmte Python Pakete auf dem Ansible Host vorhanden sein müssen ließen sich diese über den „shell“ Dependency Manager installieren.
Um möglichst den Best Practices zu folgen überprüft Molecule vor Ausführung den Code mit ansible-lint und yamllint.
In der Konfigurationsdatei ist es möglich, verschiedene Plattformen zum Test anzugeben – beispielsweise einen Docker-Containter mit CentOS 7 und Debian 10 als Basis. Plattformunabhängiger Code ist ebenfalls einer der Best Practices von Ansible. Docker ist der Standardprovider. Daher liegt ein dazugehöriges Dockerfile als jinja2-Template vor. Dieses kann beliebig erweitert werden.
Zur Verifizierung von Änderungen nach dem Ausführen der Rolle ist mittels des TestInfra Frameworks das Schreiben von Testcases möglich.
Nach der Initialisierung können mittels molecule create die vorher angegebenen Plattformen erstellt werden. Die Erstellung der Testresourcen kann mittels molecule list verifiziert werden.
Um die Rolle nun auszuführen reicht ein molecule converge.
Falls die Testcases noch nicht 100%ig automatisiert sind, ist die Anmeldung mittels molecule login [–host ] auf einer der Testinstanzen und somit die manuelle Prüfung der Ergebnisse möglich.
Nach erfolgreichem Durchlauf kann man die erstellten Instanzen mittels molecule destroy wieder ausschalten bzw. löschen.
Den kompletten oben beschriebenen Workflow kann man mit dem Kommando molecule test ausführen.
Wie auch Ansible selbst ist die Einstiegshürde für Molecule relativ gering. Gleichzeitig können komplexe Anwendungsfälle durch die Pluginstruktur bedingte hohe Konfigurierbarkeit abgedeckt werden.
ATIX-Crew
Neueste Artikel von ATIX-Crew (alle ansehen)
- Foreman Birthday Party 2024 - 1. August 2024
- CrewDay 2024 - 6. Juni 2024
- Die XZ-Sicherheitsschwachstelle: Eine Übersicht - 9. April 2024