So testen Sie Ansible-Rollen mit Molecule unter Ubuntu 16.04

_Der Autor hat das Programm Mozilla Foundation ausgewählt, um eine Spende im Rahmen des Programms Write for DOnations zu erhalten.

Einführung

Unit-Tests unter Ansible sind der Schlüssel, um sicherzustellen, dass die Rollen wie vorgesehen funktionieren. Molecule erleichtert diesen Vorgang, indem Sie Szenarien angeben können, in denen Rollen für verschiedene Umgebungen getestet werden. Mit Ansible under the hood verlagert Molecule Rollen an einen Provisioner, der die Rolle in einer konfigurierten Umgebung bereitstellt, und ruft einen Prüfer (z. B. Testinfra) auf, um die Konfigurationsabweichung zu überprüfen. Dadurch wird sichergestellt, dass Ihre Rolle alle erwarteten Änderungen an der Umgebung in diesem bestimmten Szenario vorgenommen hat.

In diesem Handbuch erstellen Sie eine Ansible-Rolle, die Apache auf einem Host bereitstellt und Firewalld unter CentOS 7 konfiguriert. Um zu testen, ob diese Rolle wie beabsichtigt funktioniert, erstellen Sie einen Test in Molecule mit Docker als Treiber und Testinfra, einer Python-Bibliothek zum Testen des Serverstatus. Molecule stellt Docker-Container bereit, um die Rolle zu testen, und Testinfra überprüft, ob der Server wie vorgesehen konfiguriert wurde. Wenn Sie fertig sind, können Sie mehrere Testfälle für Builds in verschiedenen Umgebungen erstellen und diese Tests mit Molecule ausführen.

Voraussetzungen

Bevor Sie mit diesem Handbuch beginnen, benötigen Sie Folgendes:

Schritt 1 - Vorbereiten der Umgebung

Um unsere Rolle und Tests zu erstellen, erstellen wir zunächst eine virtuelle Umgebung und installieren Molecule. Durch die Installation von Molecule wird auch Ansible installiert, sodass mithilfe von Playbooks Rollen erstellt und Tests ausgeführt werden können.

Beginnen Sie, indem Sie sich als Benutzer ohne Rootberechtigung anmelden und sicherstellen, dass Ihre Repositorys auf dem neuesten Stand sind:

sudo apt-get update

Dadurch wird sichergestellt, dass Ihr Paket-Repository die neueste Version des Pakets "+ python-pip " enthält, mit der " pip " und Python 2.7 installiert werden. Wir werden ` pip ` verwenden, um eine virtuelle Umgebung zu erstellen und zusätzliche Pakete zu installieren. Um ` pip +` zu installieren, führen Sie Folgendes aus:

sudo apt-get install -y python-pip

Verwenden Sie + pip +, um das Python-Modul + virtualenv + zu installieren:

python -m pip install virtualenv

Als nächstes erstellen und aktivieren wir die virtuelle Umgebung:

python -m virtualenv

Aktivieren Sie es, um sicherzustellen, dass Ihre Aktionen auf diese Umgebung beschränkt sind:

source my_env/bin/activate

Installiere + molecule und` + docker` mit + pip:

python -m pip install molecule docker

Hier ist, was jedes dieser Pakete tun wird:

  • + Molekül +: Dies ist das Hauptpaket für Moleküle, mit dem Sie Rollen testen. Durch die Installation von + molecule + wird Ansible automatisch zusammen mit anderen Abhängigkeiten installiert und die Verwendung von Ansible-Playbooks zum Ausführen von Rollen und Tests ermöglicht.

  • + docker +: Diese Python-Bibliothek wird von Molecule zur Anbindung an Docker verwendet. Sie benötigen dies, da Sie Docker als Treiber verwenden.

Als nächstes erstellen wir eine Rolle in Molecule.

Schritt 2 - Eine Rolle im Molekül erstellen

Wenn Ihre Umgebung eingerichtet ist, können Sie mit Molecule eine grundlegende Rolle zum Testen einer Apache-Installation erstellen. Diese Rolle erstellt die Verzeichnisstruktur und einige erste Tests und gibt Docker als Treiber an, damit Molecule Docker zum Ausführen seiner Tests verwendet.

Erstellen Sie eine neue Rolle mit dem Namen "+ ansible-apache":

molecule init role -r ansible-apache -d docker

Das Flag "+ -r " gibt den Namen der Rolle an, während " -d +" den Treiber angibt, der die Hosts bereitstellt, die Molecule beim Testen verwenden soll.

Wechseln Sie in das Verzeichnis der neu angelegten Rolle:

cd ansible-apache

Testen Sie die Standardrolle, um zu überprüfen, ob Molecule ordnungsgemäß eingerichtet wurde:

molecule test

Es wird eine Ausgabe angezeigt, in der alle Standardtestaktionen aufgelistet sind:

Output--> Validating schema /home/sammy/ansible-apache/molecule/default/molecule.yml.
Validation completed successfully.
--> Test matrix

└── default
   ├── lint
   ├── destroy
   ├── dependency
   ├── syntax
   ├── create
   ├── prepare
   ├── converge
   ├── idempotence
   ├── side_effect
   ├── verify
   └── destroy
...

Vor dem Start des Tests überprüft Molecule die Konfigurationsdatei "+ molecule.yml +", um sicherzustellen, dass alles in Ordnung ist. Es wird auch diese Testmatrix gedruckt, die die Reihenfolge der Testaktionen angibt.

Wir werden jede Testaktion im Detail besprechen, sobald Sie Ihre Rolle erstellt und Ihre Tests angepasst haben. Achten Sie vorerst auf das "+ PLAY_RECAP " für jeden Test und stellen Sie sicher, dass keine der Standardaktionen den Status " failed " zurückgibt. Zum Beispiel sollte " PLAY_RECAP " für die Standardaktion "" create "+" folgendermaßen aussehen:

Output...
PLAY RECAP *********************************************************************
localhost                  : ok=5    changed=4    unreachable=0    failed=0

Fahren wir mit dem Ändern der Rolle zum Konfigurieren von Apache und Firewalld fort.

Schritt 3 - Konfigurieren von Apache und Firewalld

Zum Konfigurieren von Apache und Firewalld erstellen Sie eine Aufgabendatei für die Rolle, in der die zu installierenden Pakete und die zu aktivierenden Dienste angegeben werden. Diese Details werden aus einer Variablendatei und einer Vorlage extrahiert, die Sie zum Ersetzen der Apache-Standardindexseite verwenden.

Erstellen Sie eine Aufgabendatei für die Rolle mit + nano + oder Ihrem bevorzugten Texteditor:

nano tasks/main.yml

Sie werden sehen, dass die Datei bereits vorhanden ist. Löschen Sie die Inhalte und fügen Sie den folgenden Code ein, um die erforderlichen Pakete zu installieren und die richtigen Dienste, HTML-Standardeinstellungen und Firewall-Einstellungen zu aktivieren:

~ / ansible-apache / tasks / main.yml

---
- name: "Ensure required packages are present"
 yum:
   name: "{{ pkg_list }}"
   state: present

- name: "Ensure latest index.html is present"
 template:
   src: index.html.j2
   dest: /var/www/html/index.html

- name: "Ensure httpd service is started and enabled"
 service:
   name: "{{ item }}"
   state: started
   enabled: true
 with_items: "{{ svc_list }}"

- name: "Whitelist http in firewalld"
 firewalld:
   service: http
   state: enabled
   permanent: true
   immediate: true

Dieses Spielbuch enthält 4 Aufgaben:

  • " Sicherstellen, dass erforderliche Pakete vorhanden sind ": Diese Task installiert die in der Variablendatei unter + pkg_list + aufgelisteten Pakete. Die Variablendatei befindet sich unter "+ ~ / ansible-apache / vars / main.yml +" und wird am Ende dieses Schritts erstellt.

  • " Sicherstellen, dass die neueste index.html vorhanden ist ": Diese Aufgabe kopiert eine Vorlagenseite + index.html.j2 + und fügt sie in die Standardindexdatei `+ / var / www / html / index.html + ein `, generiert von Apache. In diesem Schritt erstellen Sie auch die Vorlage.

  • " Sicherstellen, dass der httpd-Dienst gestartet und aktiviert ist ": Diese Task startet und aktiviert die in + svc_list + in der Variablendatei aufgelisteten Dienste.

  • " Whitelist http in firewalld ": Diese Task listet den Dienst + http + in + firewalld + auf. Firewalld ist eine vollständige Firewall-Lösung, die standardmäßig auf CentOS-Servern vorhanden ist. Damit der "+ http " - Dienst funktioniert, müssen Sie die erforderlichen Ports verfügbar machen. Wenn Sie " firewalld +" anweisen, einen Dienst auf die Whitelist zu setzen, wird sichergestellt, dass alle für den Dienst erforderlichen Ports auf der Whitelist aufgeführt werden.

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Als nächstes erstellen wir ein "+ templates " -Verzeichnis für die " index.html.j2 +" -Vorlagenseite:

mkdir templates

Erstellen Sie die Seite selbst:

nano templates/index.html.j2

Fügen Sie den folgenden Code ein:

~ / ansible-apache / templates / index.html.j2

<div style="text-align: center">
   <h2>Managed by Ansible</h2>
</div>

Speichern und schließen Sie die Datei.

Der letzte Schritt zum Abschließen der Rolle besteht darin, die Variablendatei zu schreiben, in der die Namen der Pakete und Dienste für Ihr Hauptrollenspielbuch angegeben sind:

nano vars/main.yml

Fügen Sie den Standardinhalt mit dem folgenden Code ein, der "+ pkg_list " und " svc_list +" angibt:

~ / ansible-apache / vars / main.yml

---
pkg_list:
 - httpd
 - firewalld
svc_list:
 - httpd
 - firewalld

Diese Listen enthalten folgende Informationen:

  • + pkg_list +: Enthält die Namen der Pakete, die von der Rolle installiert werden: + httpd + und + firewalld +.

  • + svc_list +: Enthält die Namen der Dienste, die von der Rolle gestartet und aktiviert werden: + httpd + und + firewalld +.

Nachdem Sie die Rolle erstellt haben, konfigurieren Sie Molecule, um zu testen, ob sie wie beabsichtigt funktioniert.

Schritt 4 - Ändern der Rolle zum Ausführen von Tests

In unserem Fall beinhaltet das Konfigurieren von Molecule das Ändern der Molecule-Konfigurationsdatei "+ molecule.yml ", um Plattformspezifikationen hinzuzufügen. Da Sie eine Rolle testen, mit der der Dienst " httpd " systemd konfiguriert und gestartet wird, müssen Sie ein Image mit konfiguriertem systemd und aktiviertem privilegiertem Modus verwenden. Für dieses Tutorial verwenden Sie das Image " milcom / centos7-systemd +" available on Docker Hub. Im privilegierten Modus können Container mit fast allen Funktionen ihres Hostcomputers ausgeführt werden.

Bearbeiten wir "+ molecule.yml +", um diese Änderungen wiederzugeben:

nano molecule/default/molecule.yml

Fügen Sie die hervorgehobenen Plattforminformationen hinzu:

~ / ansible-apache / molecule / default / molecule.yml

---
dependency:
 name: galaxy
driver:
 name: docker
lint:
 name: yamllint
platforms:



provisioner:
 name: ansible
 lint:
   name: ansible-lint
scenario:
 name: default
verifier:
 name: testinfra
 lint:
   name: flake8

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Nachdem Sie die Testumgebung erfolgreich konfiguriert haben, können Sie nun die Testfälle schreiben, die Molecule nach Ausführung der Rolle für Ihren Container ausführt.

Schritt 5 - Testfälle schreiben

Im Test für diese Rolle überprüfen Sie die folgenden Bedingungen:

  • Dass die Pakete "+ httpd " und " firewalld +" installiert sind.

  • Dass die Dienste "+ httpd " und " firewalld +" ausgeführt und aktiviert werden.

  • Dass der "+ http +" - Dienst in Ihren Firewall-Einstellungen aktiviert ist.

  • Das + index.html + enthält die gleichen Daten, die in Ihrer Vorlagendatei angegeben sind.

Wenn alle diese Tests erfolgreich sind, funktioniert die Rolle wie beabsichtigt.

Um die Testfälle für diese Bedingungen zu schreiben, bearbeiten wir die Standardtests in "+ ~ / ansible-apache / molecule / default / tests / test_default.py +". Mit Testinfra schreiben Sie die Testfälle als Python-Funktionen, die Molekülklassen verwenden.

Öffne + test_default.py +:

nano molecule/default/tests/test_default.py

Löschen Sie den Inhalt der Datei, damit Sie die Tests von Grund auf neu schreiben können.

Importieren Sie zunächst die erforderlichen Python-Module:

~ / ansible-apache / molecule / default / tests / test_default.py

import os
import pytest

import testinfra.utils.ansible_runner

Diese Module umfassen:

  • + os +: Dieses integrierte Python-Modul ermöglicht betriebssystemabhängige Funktionen, sodass Python mit dem zugrunde liegenden Betriebssystem kommunizieren kann.

  • + pytest +: Das https://docs.pytest.org/en/latest/ [+ pytest +] Modul ermöglicht das Schreiben von Tests.

  • + testinfra.utils.ansible_runner +: Dieses Testinfra-Modul verwendet Ansible als Backend zur Befehlsausführung.

Fügen Sie unter den Modul-Importen den folgenden Code ein, der das Ansible-Backend verwendet, um die aktuelle Host-Instanz zurückzugeben:

~ / ansible-apache / molecule / default / tests / test_default.py

...
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
   os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')

Wenn Ihre Testdatei für die Verwendung des Ansible-Backends konfiguriert ist, schreiben wir Unit-Tests, um den Status des Hosts zu testen.

Der erste Test stellt sicher, dass "+ httpd " und " firewalld +" installiert sind:

~ / ansible-apache / molecule / default / tests / test_default.py

...

@pytest.mark.parametrize('pkg', [
 'httpd',
 'firewalld'
])
def test_pkg(host, pkg):
   package = host.package(pkg)

   assert package.is_installed

Der Test beginnt mit dem https://docs.pytest.org/en/latest/parametrize.html#pytest-mark-parametrize-parametrizing-test-functions [+ pytest.mark.parametrize + decorator], was uns erlaubt Parametrisieren Sie die Argumente für den Test. Bei diesem ersten Test wird "+ test_pkg " als Parameter verwendet, um das Vorhandensein der Pakete " httpd " und " firewalld +" zu testen.

Der nächste Test prüft, ob "+ httpd " und " firewalld " aktiv und aktiviert sind. Es nimmt ` test_svc +` als Parameter:

~ / ansible-apache / molecule / default / tests / test_default.py

...

@pytest.mark.parametrize('svc', [
 'httpd',
 'firewalld'
])
def test_svc(host, svc):
   service = host.service(svc)

   assert service.is_running
   assert service.is_enabled

Der letzte Test prüft, ob die an + parametrize () + übergebenen Dateien und Inhalte existieren. Wenn die Datei nicht von Ihrer Rolle erstellt wurde und der Inhalt nicht richtig eingestellt ist, gibt "+ assert " " False +" zurück:

~ / ansible-apache / molecule / default / tests / test_default.py

...

@pytest.mark.parametrize('file, content', [
 ("/etc/firewalld/zones/public.xml", "<service name=\"http\"/>"),
 ("/var/www/html/index.html", "Managed by Ansible")
])
def test_files(host, file, content):
   file = host.file(file)

   assert file.exists
   assert file.contains(content)

Bei jedem Test gibt "+ assert" je nach Testergebnis "+ True" oder "+ False" zurück.

Die fertige Datei sieht folgendermaßen aus:

~ / ansible-apache / molecule / default / tests / test_default.py

import os
import pytest

import testinfra.utils.ansible_runner

testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
   os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')


@pytest.mark.parametrize('pkg', [
 'httpd',
 'firewalld'
])
def test_pkg(host, pkg):
   package = host.package(pkg)

   assert package.is_installed


@pytest.mark.parametrize('svc', [
 'httpd',
 'firewalld'
])
def test_svc(host, svc):
   service = host.service(svc)

   assert service.is_running
   assert service.is_enabled


@pytest.mark.parametrize('file, content', [
 ("/etc/firewalld/zones/public.xml", "<service name=\"http\"/>"),
 ("/var/www/html/index.html", "Managed by Ansible")
])
def test_files(host, file, content):
   file = host.file(file)

   assert file.exists
   assert file.contains(content)

Nachdem Sie Ihre Testfälle festgelegt haben, testen wir die Rolle.

Schritt 6 - Testen der Rolle mit Molekül

Sobald Sie den Test starten, führt Molecule die in Ihrem Szenario definierten Aktionen aus. Lassen Sie uns nun das Standard-Szenario "+ Molekül +" erneut ausführen und die Aktionen in der Standard-Testsequenz ausführen, während Sie sich die einzelnen Szenarien genauer ansehen.

Führen Sie den Test für das Standardszenario erneut aus:

molecule test

Dadurch wird der Testlauf gestartet. Die Erstausgabe druckt die Standardtestmatrix:

Output--> Validating schema /home/sammy/ansible-apache/molecule/default/molecule.yml.
Validation completed successfully.
--> Test matrix

└── default
   ├── lint
   ├── destroy
   ├── dependency
   ├── syntax
   ├── create
   ├── prepare
   ├── converge
   ├── idempotence
   ├── side_effect
   ├── verify
   └── destroy

Lassen Sie uns jede Testaktion und den erwarteten Output durchgehen und mit dem Flusen beginnen.

Die Aktion linting führte + yamllint,` + flake 8` und + ansible-lint aus:

  • + yamllint +: Dieser Linter wird für alle im Rollenverzeichnis vorhandenen YAML-Dateien ausgeführt.

  • + flake8 +: Dieser Python-Code-Linter überprüft Tests, die für Testinfra erstellt wurden.

  • + ansible-lint +: Dieser Linter für Ansible-Playbooks wird in allen Szenarien ausgeführt.

Output...
--> Scenario: 'default'
--> Action: 'lint'
--> Executing Yamllint on files found in /home/sammy/ansible-apache/...
Lint completed successfully.
--> Executing Flake8 on files found in /home/sammy/ansible-apache/molecule/default/tests/...
Lint completed successfully.
--> Executing Ansible Lint on /home/sammy/ansible-apache/molecule/default/playbook.yml...
Lint completed successfully.

Die nächste Aktion, destroy, wird mit der Datei + destroy.yml + ausgeführt. Dies wird durchgeführt, um Ihre Rolle in einem neu erstellten Container zu testen.

Standardmäßig wird destroy zweimal aufgerufen: Zu Beginn des Testlaufs, um vorhandene Container zu löschen, und am Ende, um den neu erstellten Container zu löschen:

Output...
--> Scenario: 'default'
--> Action: 'destroy'

   PLAY [Destroy] *****************************************************************

   TASK [Destroy molecule instance(s)] ********************************************
   changed: [localhost] => (item=None)
   changed: [localhost]

   TASK [Wait for instance(s) deletion to complete] *******************************
   ok: [localhost] => (item=None)
   ok: [localhost]

   TASK [Delete docker network(s)] ************************************************
   skipping: [localhost]

   PLAY RECAP *********************************************************************
   localhost                  : ok=2    changed=1    unreachable=0    failed=0

Nachdem die Zerstörungsaktion abgeschlossen ist, wechselt der Test zu dependency. Mit dieser Aktion können Sie Abhängigkeiten von https://galaxy.ansible.com/ [+ ansible-galaxy +] abrufen, wenn Ihre Rolle dies erfordert. In diesem Fall führt die Rolle Folgendes nicht aus:

Output...
--> Scenario: 'default'
--> Action: 'dependency'
Skipping, missing the requirements file.

Die nächste Testaktion ist eine Syntaxprüfung, die für das Standard-Playbook "+ playbook.yml " ausgeführt wird. Es funktioniert ähnlich wie das Flag " - syntax-check" im Befehl "+ ansible-playbook --syntax-check playbook.yml":

Output...
--> Scenario: 'default'
--> Action: 'syntax'

   playbook: /home/sammy/ansible-apache/molecule/default/playbook.yml

Als nächstes fährt der Test mit der Aktion create fort. Dabei wird die Datei "+ create.yml +" im Molekülverzeichnis Ihrer Rolle verwendet, um einen Docker-Container mit Ihren Spezifikationen zu erstellen:

Output...

--> Scenario: 'default'
--> Action: 'create'

   PLAY [Create] ******************************************************************

   TASK [Log into a Docker registry] **********************************************
   skipping: [localhost] => (item=None)
   skipping: [localhost]

   TASK [Create Dockerfiles from image names] *************************************
   changed: [localhost] => (item=None)
   changed: [localhost]

   TASK [Discover local Docker images] ********************************************
   ok: [localhost] => (item=None)
   ok: [localhost]

   TASK [Build an Ansible compatible image] ***************************************
   changed: [localhost] => (item=None)
   changed: [localhost]

   TASK [Create docker network(s)] ************************************************
   skipping: [localhost]

   TASK [Create molecule instance(s)] *********************************************
   changed: [localhost] => (item=None)
   changed: [localhost]

   TASK [Wait for instance(s) creation to complete] *******************************
   changed: [localhost] => (item=None)
   changed: [localhost]

   PLAY RECAP *********************************************************************
   localhost                  : ok=5    changed=4    unreachable=0    failed=0

Nach dem Erstellen fährt der Test mit der Aktion vorbereiten fort. Diese Aktion führt das Prepare-Playbook aus, das den Host in einen bestimmten Zustand versetzt, bevor Converge ausgeführt wird. Dies ist nützlich, wenn Ihre Rolle eine Vorkonfiguration des Systems erfordert, bevor die Rolle ausgeführt wird. Auch dies gilt nicht für unsere Rolle:

Output...
--> Scenario: 'default'
--> Action: 'prepare'
Skipping, prepare playbook not configured.

Nach der Vorbereitung führt die Aktion converge Ihre Rolle für den Container aus, indem Sie das Playbook + playbook.yml + ausführen. Wenn in der Datei "+ molecule.yml +" mehrere Plattformen konfiguriert sind, konvergiert Molecule in allen folgenden Fällen:

Output...
--> Scenario: 'default'
--> Action: 'converge'

   PLAY [Converge] ****************************************************************

   TASK [Gathering Facts] *********************************************************
   ok: [centos7]

   TASK [ansible-apache : Ensure required packages are present] *******************
   changed: [centos7]

   TASK [ansible-apache : Ensure latest index.html is present] ********************
   changed: [centos7]

   TASK [ansible-apache : Ensure httpd service is started and enabled] ************
   changed: [centos7] => (item=httpd)
   changed: [centos7] => (item=firewalld)

   TASK [ansible-apache : Whitelist http in firewalld] ****************************
   changed: [centos7]

   PLAY RECAP *********************************************************************
   centos7                    : ok=5    changed=4    unreachable=0    failed=0

Nach der Bedeckung geht der Test zu idempotence weiter. Mit dieser Aktion wird das Playbook auf Inaktivität getestet, um sicherzustellen, dass in mehreren Durchläufen keine unerwarteten Änderungen vorgenommen werden:

Output...
--> Scenario: 'default'
--> Action: 'idempotence'
Idempotence completed successfully.

Die nächste Testaktion ist die Nebeneffektaktion. Auf diese Weise können Sie Situationen erstellen, in denen Sie mehr Dinge testen können, z. B. HA-Failover. Standardmäßig konfiguriert Molecule kein Nebeneffekt-Playbook und die Aufgabe wird übersprungen:

Output...
--> Scenario: 'default'
--> Action: 'side_effect'
Skipping, side effect playbook not configured.

Molecule führt dann die Aktion verifier mit dem Standardverifizierer Testinfra aus. Diese Aktion führt die Tests aus, die Sie zuvor in + test_default.py + geschrieben haben. Wenn alle Tests erfolgreich abgeschlossen wurden, wird eine Erfolgsmeldung angezeigt und Molecule fährt mit dem nächsten Schritt fort:

Output...
--> Scenario: 'default'
--> Action: 'verify'
--> Executing Testinfra tests found in /home/sammy/ansible-apache/molecule/default/tests/...
   ============================= test session starts ==============================
   platform linux2 -- Python 2.7.12, pytest-3.8.0, py-1.6.0, pluggy-0.7.1
   rootdir: /home/sammy/ansible-apache/molecule/default, inifile:
   plugins: testinfra-1.14.1
collected 6 items

   tests/test_default.py ......                                             [100%]

   ========================== 6 passed in 56.73 seconds ===========================

Schließlich zerstört Molecule die während des Tests abgeschlossenen Instanzen und löscht das diesen Instanzen zugewiesene Netzwerk:

Output...
--> Scenario: 'default'
--> Action: 'destroy'

   PLAY [Destroy] *****************************************************************

   TASK [Destroy molecule instance(s)] ********************************************
   changed: [localhost] => (item=None)
   changed: [localhost]

   TASK [Wait for instance(s) deletion to complete] *******************************
   changed: [localhost] => (item=None)
   changed: [localhost]

   TASK [Delete docker network(s)] ************************************************
   skipping: [localhost]

   PLAY RECAP *********************************************************************
   localhost                  : ok=2    changed=2    unreachable=0    failed=0

Die Testaktionen sind nun abgeschlossen und bestätigen, dass Ihre Rolle wie beabsichtigt funktioniert hat.

Fazit

In diesem Artikel haben Sie eine Ansible-Rolle zum Installieren und Konfigurieren von Apache und Firewalld erstellt. Anschließend haben Sie mit Testinfra Komponententests geschrieben, mit denen Molecule bestätigt hat, dass die Rolle erfolgreich ausgeführt wurde.

Sie können dieselbe grundlegende Methode für hochkomplexe Rollen verwenden und das Testen auch mithilfe einer CI-Pipeline automatisieren. Molecule ist ein in hohem Maße konfigurierbares Tool, mit dem Rollen bei allen Anbietern getestet werden können, die Ansible unterstützt, nicht nur bei Docker. Sie können auch Tests für Ihre eigene Infrastruktur automatisieren, um sicherzustellen, dass Ihre Rollen immer auf dem neuesten Stand und funktionsfähig sind. Die offizielle Molecule documentation ist die beste Ressource zum Erlernen der Verwendung von Molecule.