Molekül - Testen von Ansible-Rollen

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?


  1. Initialisierung der Rollenrolle
  2. Fahrer / Anbieter
  3. Idempotenztests
  4. Ü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!

Source: https://habr.com/ru/post/de437216/


All Articles