Sie möchten versuchen, ein gewisses Maß an Ausfallsicherheit in unser Ansible-Setup zu integrieren, das sich mit Bereitstellung und Konfiguration befasst.
Ich verstehe ein paar Methoden zum Testen auf der Konfigurationsseite, frage mich jedoch, wie ich das Testen auf der Bereitstellungsseite am besten implementieren kann und ob es Tools gibt, die bei dieser Art der Implementierung helfen können.
Gegenwärtig werden viele unserer Tests seriell während des Playbooks durchgeführt, was sehr sinnvoll ist für Dinge wie "Hat der Service Einzug gehalten? Ist das VIP verfügbar? Hat diese asynchrone Aufgabe abgeschlossen?" Konfiguration sowohl auf Anwendungs- als auch auf Bereitstellungsebene (z. B. VM-Konfiguration). Ich bin mir bewusst, dass Ansible nicht das beste Tool für die Arbeit mit Konfigurationsdrift ist, aber ich bin gespannt auf Ihre eigenen Meinungen.
Wenn Sie etwas haben, um den Prozess noch besser zu automatisieren. (Wir haben ein paar hässliche Skripte, die täglich in Flaute berichten).
Hinweis : Momentan gibt es einige Bedingungen, unter denen eine erneute Bereitstellung erfolgen kann (z. B. Neuerstellung aus einem Backup, Probleme mit kritischen Systemen), in der Regel werden jedoch nur einige der möglichen Konfigurationsaufgaben durchlaufen und es wird nicht mehr darüber nachgedacht.
I'm aware Ansible isn't the best tool for working with configuration drift
Bitte erkläre.Antworten:
Einige Optionen da draußen ..
Prüfmittel : Sortiert nach Github-Sternen
Hauptunterschiede zwischen ihnen:
Letztendlich würde ich vorschlagen, einen Tag lang mit allen zu experimentieren, um ein Gefühl für sie zu bekommen, bevor Sie selbst entscheiden.
Kontinuierliche Prüfung / Divergenzprüfung:
Testgeschirre für die Entwicklung:
Vollständige Offenlegung: Ich bin der Autor von Goss
UPDATE: InSpec 4.x oder höher verwendet eine gemischte kommerzielle / Open Source-Lizenz - siehe Kommentare.
quelle
Die beiden Tools, die ich dafür gesehen habe, sind InSpec und ServerSpec . Serverspec ist ein Ruby-basiertes Tool, das auf RSpec aufbaut . InSpec ist von RSpec und ServerSpec inspiriert.
Ich habe ServerSpec verwendet. Es ist cool, aber vielleicht nicht 100% stabil. Ich hatte Probleme beim Testen auf bestimmte Softwareversionen unter Ubuntu.
Ich habe die InSpec-Dokumente gelesen, mich aber noch nicht eingehend damit befasst. Es macht im Wesentlichen dasselbe wie Serverspec.
Gemessen an den Github-Commits scheint die Arbeit an ServerSpec etwas nachgelassen zu haben, während InSpec gerade hochgefahren wird.
UPDATE: InSpec 4.x oder höher verwendet eine gemischte kommerzielle / Open Source-Lizenz - siehe Kommentare.
quelle
Wenn Sie Konfigurationsmanagement-Tools wie Ansible verwenden, ist das Tool selbst dafür verantwortlich, Konfigurationsabweichungen zu verhindern. Sobald Sie Ansible zum Festlegen einer bestimmten Konfiguration verwendet haben, stellt die wiederholte Ausführung von Ansible sicher, dass Ihre Konfiguration so ist, wie Sie sie definiert haben. Dies setzt auch voraus, dass Ihr Ansible-Code in einer Weise geschrieben ist, die idempotent ist.
Angesichts des oben Gesagten können Sie die Bereitstellung testen, indem Sie Ihre Ansible-Wiedergabelisten in einer Schleife von einem Server aus ausführen. Beispielsweise kann ein Cron-Job oder Jenkins die Wiedergabebücher alle 30 Minuten ausführen und Fehler zurückmelden. Wenn keine Fehler vorliegen, bedeutet dies, dass Ihre Konfiguration überprüft wird. Wenn Fehler vorliegen, bedeutet dies, dass Probleme auftreten, die Server in den gewünschten Zustand zu versetzen .
In einem Fall, in dem Sie nicht darauf vertrauen können, dass Ihr Code als idempotent geschrieben wird, und Sie Ansible daher nicht wirklich wiederholt in einer Schleife von einem automatischen Server ausführen können, gibt es eine Problemumgehung. Sie können wie oben (Lauf ansible in einer Schleife) das gleiche tun , aber seine Verwendung Trockenlaufmodus . Jedes Mal, wenn Ansible meldet, dass Änderungen erforderlich sind, kann der Jenkins-Job (oder Cron-Job) Sie darüber informieren, dass Ihre bereitgestellte Konfiguration geändert wurde und die Server nicht in ihrem gewünschten Zustand sind .
Um sicherzustellen, dass Ihr Ansible-Code tatsächlich das tut, was Sie glauben, dass er tun sollte, gelten die von Dave Swersky genannten Lösungen. Sowohl InSpec als auch Serverspec sind Tools, die auf unterschiedliche Weise überprüfen , ob Ihre Playbooks tatsächlich das tun , was Sie meinen. Eine großartige Möglichkeit, diese Art von Tools in Testumgebungen (auch Docking-Container) auszuführen, ist die Verwendung von kitchen.ci, die den gesamten Leim zwischen den verschiedenen Tools zum Testen von Infraeinheiten und der Ausführung Ihrer Playbooks / Module / Kochbücher verarbeitet.
Kitchen.ci wurde ursprünglich zum Testen von Chefkochbüchern verwendet, es gibt jedoch auch Plugins für Ansible und andere CM-Tools.
quelle
Test Kitchen verfügt über ein Plug-in für die Bereitstellung von Küchengeräten zum Testen von Ansible-Code. Es ist nicht so tiefgreifend wie die Integration von Chefkoch, aber in den meisten Fällen ist es ausreichend. Es gibt auch das neuere Molecule-Projekt, bei dem es sich um ein spezielles Ansible-Testsystem handelt.
quelle
Mit Outthentic können Sie Konfigurations- / Infrastrukturdiskrepanzen / Abweichungen nachverfolgen . Es ist einfach, eine Testsuite zu erstellen, um den gewünschten Status zu "reparieren" und ihn jedes Mal erneut auszuführen, wenn Sie unerwünschte Änderungen nachverfolgen müssen.
quelle