Die Infrastruktur als Code fordert uns auf, Tools zu verwenden, die Ihre Builds automatisieren. Groß. Tools wie Ansible , Koch , Marionette , Salzstapel und andere bringen uns dazu, zu schreiben, wie die Infrastruktur aussieht, und gleichzeitig die Unterschiede zu beseitigen .
In Salt Stack werden diese Bits als Zustände bezeichnet . Wenn der Zustand nicht mit der Realität übereinstimmt, wird das Tool ihn für uns lösen. Mit anderen Worten: Wir schreiben einen Test für unsere Infrastruktur. Wenn der Test fehlschlägt, wird er vom Tool selbst behoben. Zumindest ist das die Idee.
XP lehrt uns, TDD zu verwenden, und die Frage ist, ob es auf die Infrastruktur anwendbar ist. Das Werkzeug legt nahe, dass dies der Fall ist.
Ich kann mir einige Arten von Tests vorstellen, die sehr nützlich sein können.
Wir schreiben Rauchtests, die mit dem bereitgestellten Dienst gebündelt sind, um sicherzustellen, dass der bereitgestellte Dienst durchgängig funktioniert und wie erwartet ausgeführt wird. Dies wäre ein API-Aufruf oder / und eine systemctl-Überprüfung, um sicherzustellen, dass das, was wir gerade bereitgestellt haben, funktioniert. Ein Großteil dieser Funktionen kann in denselben Zuständen behandelt werden, da Tools wie ansible Zustände haben, um sicherzustellen, dass ein Dienst ausgeführt wird.
Es gibt das Projekt Molecule , mit dem einzelne Rollen (wie ansible seine Zustände nennt) gegen Docker oder eine andere temporäre Virtualisierungs-Engine ausgeführt werden können. Dies zwingt dazu, Rollen zu entkoppeln und ermöglicht es, sie während der Arbeit isoliert vom Spielbuch auszuführen. Tests ermöglichen meistens das Verspotten der Variablen, mit denen die Rolle arbeiten soll. Andere Beispiele scheinen jedoch eine Verdoppelung der Ansible-Engine zu sein (behaupten, eine Datei gehört einem Benutzer ...).
Das Tech-Radar von ThoughtWorks lobt derzeit Tools wie inspec , serverspec oder goss für die Überprüfung, ob der Server die Spezifikation erfüllt. Aber wir schreiben eine Spezifikation, nicht wahr?
Gibt es also einen Grund, die Infrastruktur weiter zu testen, wenn wir die Infrastruktur in Zuständen / Rollen beschreiben? Ich könnte vermuten, dass dies in größeren Organisationen, in denen ein Team die Spezifikation bereitstellt und das andere folgt, notwendiger wird, oder wenn es eine große Anzahl von Rollen gibt, möchten Sie vielleicht eine Teilmenge davon ausführen und einen Geschwindigkeitsvorteil aus Tests ziehen? Ich habe Mühe zu verstehen, warum Sie einen Test schreiben würden, wenn Sie eine Rolle / einen Status für dieselbe Frage im Auge haben könnten.
goss
. So wird beispielsweise RPM installiert (ansible) und dann getestet, ob die erwartete Standarddatei eingerichtet ist oder der Dienst ausgeführt wird und auf einen bestimmten Port wartet. Ich möchte ein solches Problem nicht automatisch beheben, sondern benachrichtigt werden und den Fortschritt stoppen. Sicher, Ansible kann das System auch für Sie testen. Sie müssen nur explizit daraufgoss