Guten Tag. Ansible wurde mehr als einmal auf Habré erwähnt, aber ich habe keine Artikel zum Testen seiner Rollen mit dem Molekül gefunden. Ich finde dieses Framework jedoch äußerst praktisch und möchte dies mit Habrs Publikum teilen.
Aber zuerst ein wenig über das, was ich vorher benutzt habe.
Um die von mir erstellten Ansible-Rollen zu testen, habe ich zuvor Vagrant verwendet und bin unkompliziert gefahren:
$ vagrant init debian/jessie64 $ vagrant up
Erstellen von virtuellen Maschinen, nach denen ich Inventar und Playbook schrieb, um die Rolle zu starten, bis ich eines Tages das Molekül kennenlernte.
Was kann das Molekül bieten?
- Initialisierung der Rollenrolle
- Fahrer / Anbieter
- Idempotenztests
- Überprüfung
Initialisierung der Rollenrolle
Wenn eine neue Rolle angegeben wird, wird eine Beispielstruktur für die ansible Rolle erstellt
Fahrer / Anbieter
Mit Molecule können wir mithilfe von Vagrant entweder einen Docker-Container oder eine virtuelle Maschine als Versuchskaninchen verwenden. Dies wird durch Angabe des Treibers während der Initialisierung oder in molecular.yml bestimmt. Weil Wenn ich die Rollen der Orchestrierung von Containern testen muss, bleibt Vagrant der bevorzugte Treiber für mich. Wenn Sie Vagrant als Treiber auswählen, können Sie auch einen Anbieter auswählen.
Folgendes ist verfügbar:
- Libvirt
- Parallelen
- VirtualBox (Standard)
- VMware Fusion
Als nächstes betrachten wir eine Variante von Vagrant mit VirtualBox als Anbieter.
Idempotenztests
Laut Wiki:
Die Eigenschaft eines Objekts oder einer Operation beim erneuten Anwenden der Operation auf das Objekt ergibt das gleiche Ergebnis wie bei einer einzelnen Operation.
In Bezug auf ansible Rollen sollten beim Neustart der Rolle keine Änderungen vorgenommen werden.
Überprüfung
Um sicherzustellen, dass die Rolle ordnungsgemäß funktioniert, reicht es nicht aus, keine der Aufgaben fehlzuschlagen. Schließlich müssen Sie überprüfen, ob die Dienste gestartet wurden, die Ports geöffnet sind usw.
Die folgenden Frameworks stehen zur Überprüfung zur Verfügung:
- Goss
- Serverspez
- Testinfra (Standard)
Ich wurde von Goss und Testinfra getestet. Für mich selbst habe ich mich für Testinfra entschieden.
Anwendungsbeispiel:
$ molecule init --role sample-role
Nach Ausführung dieses Befehls erhalten wir ein Beispielrollenverzeichnis mit einer typischen ansiblen Rollenstruktur und den erforderlichen yaml-Dateien:
defaults handlers meta molecule.yml // - molecule playbook.yml // README.md tasks tests // vars
Sie können beginnen, ohne den Schalter --role anzugeben. In diesem Fall werden die Dateien molecular.yml und playbook.yml im aktuellen Verzeichnis erstellt.
In diesem Fall müssen Sie sicherstellen, dass die Rolle auf mehreren Distributionen funktioniert. In molecyle.yml sollten Sie die Namen der Vagabundboxen (auf Plattformen) angeben:
vagrant: platforms: - name: jessie64 box: debian/jessie64 - name: centos7 box: centos/7
Fügen Sie als Nächstes die erforderlichen Aktionen / Variablen usw. hinzu. in die Rolle, nach der wir auf allen spezifischen Plattformen testen:
$ molecule test --platform all
Nach diesem Molekül:
- Wenn bereits virtuelle Maschinen erstellt wurden, werden diese angehalten und gelöscht
- erhöht die erforderlichen virtuellen Maschinen
- Testen Sie unsere Rolle mit Ansible-Lint
- erfüllen unsere Rolle in neu erstellten Containern
- wird auf Idempotenz testen
- Führen Sie testinfra-Tests durch
- löscht erstellte virtuelle Maschinen
Möglicherweise müssen Sie das Verhalten des Moleküls ändern, wenn Sie den Test ausführen. Testen Sie beispielsweise nicht auf Idempotenz. Fügen Sie dazu Folgendes zu molekül.yml hinzu:
molecule: test: sequence: - destroy - syntax - create - converge - verify - destroy
Sie können jeden der entsprechenden Schritte auch separat mit dem entsprechenden Befehl aufrufen, zum Beispiel:
$ molecule create --platform all $ molecule syntax $ molecule create $ molecule converge $ molecule verify
Löschen / erstellen Sie nicht vor jeder Konvergenz eine neue virtuelle Maschine.
Sie können eine bestimmte Plattform angeben und separat testen:
$ molecule create --platform jessie64 $ molecule syntax $ molecule create $ molecule converge $ molecule verify
Vielen Dank für Ihre Aufmerksamkeit!