Testen der Bereitstellung und Konfiguration im Ansible-Setup


33

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.



Läuft Ansible bei der Bereitstellung nur einmal? Wenn nicht, wie oft wird es ausgeführt? Ich versuche nur, das Problem zu verstehen, bevor ich eine Lösung anbiete.
Woodland Hunter

Hallo @Naphta, eine der Antworten hat Ihre Frage gelöst. Bitte akzeptieren Sie sie, indem Sie auf das Häkchen klicken. Dies zeigt der breiteren Community an, dass Sie eine Lösung gefunden haben, und verleiht dem Antwortenden und sich selbst einen gewissen Ruf. Es besteht keine Verpflichtung dazu.
Richard Slater

I'm aware Ansible isn't the best tool for working with configuration drift Bitte erkläre.
030

Antworten:


19

Einige Optionen da draußen ..

Prüfmittel : Sortiert nach Github-Sternen

  • Serverspec - Ruby, das beliebteste Tool, das auf Rubys rspec basiert
  • Goss - YAML, einfache, in sich geschlossene Binärdatei mit <10 MB, extrem schnell, kann Tests aus dem Systemstatus generieren
  • Inspec - Ruby, stellen Sie es sich als eine verbesserte Serverspezifikation vor, fast dieselbe Syntax, die von den Jungs vom Chefkoch entwickelt wurde. Errichtet, um einfacher zu sein, als serverspec zu verlängern
  • Testinfra - Python hat die coole Funktion, Ansibles Inventar / Vars verwenden zu können

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.

  • Mit Ausnahme von Goss können alle Frameworks auf einem Remote-Computer ausgeführt werden (z. B. über ssh). Goss wird nur lokal oder im Docker mit Dgoss ausgeführt.
  • Alle Frameworks können lokal auf einem Server ausgeführt werden, erfordern jedoch die Installation oder Einbettung von Python oder Ruby. Inspec bietet ein in sich geschlossenes Paket mit <150 MB mit einer eingebetteten Version von Ruby. Goss ist eine einzelne <10 MB Binärdatei ohne externe Abhängigkeiten.
  • Goss verfügt über eine integrierte Unterstützung für Nagios / Sensu-Ausgaben. Dies ermöglicht eine einfachere Integration in Überwachungstools.
  • Goss-Tests sind in der Regel einfacher, aber weniger flexibel, da sie auf YAML basieren. Mit anderen Frameworks können Sie die volle Leistungsfähigkeit der zugrunde liegenden Sprache Python / Ruby nutzen, um Tests zu schreiben oder die Funktionalität des Tools zu erweitern. (Einfachheit vs. Flexibilität)
  • Mit Goss können Sie Tests aus dem aktuellen Systemstatus generieren
  • Meines Wissens nach ist Testinfra die einzige, die eine eingebaute Unterstützung für ein messbares Inventar und Variablen bietet
  • Inspec wird vom Chef unterstützt

Kontinuierliche Prüfung / Divergenzprüfung:

  • Chef Compliance - arbeitet mit inspec zusammen, um Ihre Server und bezahlten Produkte kontinuierlich zu testen
  • Goss - Kann einfach in Nagios oder Sensu eingebunden werden. Unterstützt auch das Bereitstellen von Servertests als http-Endpunkt.

Testgeschirre für die Entwicklung:

  • kitchen - Testing harness tool, startet die Instanz, führt den Konfigurationsverwaltungscode aus und führt die Testsuite aus. Hergestellt von den Chefs
  • Molekül - Ähnlich wie in der Testküche, jedoch speziell für Ansible geschrieben

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.


4
Ich verstehe, dass Sie ein wenig voreingenommen sind, aber inspec benötigt keine Compliance, um regelmäßig ausgeführt zu werden. Und es gibt keine Abhängigkeiten zu verwalten, alle notwendigen Bibliotheken und Frameworks (Ruby) sind in dem Paket enthalten, das lokal auf jedem Knoten installiert werden kann, wenn ssh / winrm ausgeführt wird. Sie verweisen auf ausschließlich externe Befehle, die nicht wahr sind. Viele Tests werden mit internem Ruby-Code durchgeführt. (Ich denke, es lohnt sich, darauf hingewiesen zu werden)
Tensibai

Ich habe die Antwort aktualisiert, um den externen Befehl zu korrigieren, und Ruby für inspec gebündelt. Können Sie mir einen Link erklären oder senden, der erklärt, wie inspec allein zum Erkennen / Melden von Abweichungen verwendet werden kann?
Ahmed Elsabbahy

Nun, der Berichterstellungsteil liegt in Ihrer Hand. Es ist in der Tat das Compliance-Ziel, eine Darstellung zu machen. Sie können inspec jedoch in einer Crontab ausführen und sich einfach auf die Crontab-Mail verlassen, wenn ein Test Sie nicht benachrichtigt (z. B.).
Tensibai

Alles in allem, tahnks für die Bearbeitung, die eine faire Darstellung Ihres Werkzeugs und anderer klingt. Ich befürchte, dass dies schnell veraltet sein könnte, aber trotzdem +1 für die Auflistung und die Zeiger.
Tensibai

Ah, ja ... alle Werkzeuge können auf diese Weise eingesetzt werden. Ich habe versucht, Tools (oder Integrationen mit Tools) bereitzustellen, die eine bessere Berichterstellung ermöglichen. Meines Wissens gibt es Compliance, oder die Tools werden so verpackt, dass sie nagios / sensu / some-other-monitoring-tool-friendly sind. Beispiel: slideshare.net/m_richardson/... Entschuldigung, wenn es anfänglich voreingenommen war, war es nicht beabsichtigt.
Ahmed Elsabbahy

13

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.


1
"Ich hatte Probleme beim Testen auf bestimmte Softwareversionen unter Ubuntu." Ich habe das behoben, nachdem ich auf SO eine Frage dazu bemerkt hatte: stackoverflow.com/questions/42417864/…
Matt Schuchard

InSpec emuliert RSpec, baut jedoch nicht darauf auf.
Coderanger

1
@MattSchuchard Danke für diesen Hinweis!
Dave Swersky

gut "nicht 100% stabil" für ein Testgerät klingt nicht gut
ᴳᵁᴵᴰᴼ

InSpec eignet sich sehr gut als Testtool und macht es einfach, nichts auf dem Server zu installieren, wohingegen ServerSpec dies nur mit etwas zusätzlicher Arbeit erledigen kann. Einige Arbeiten wären jedoch erforderlich, damit InSpec ein Ansible-Inventar verwendet - wahrscheinlich einfacher, wenn das Inventar im YAML-Format (Ansible 2.4+) vorliegt.
RichVel

10

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.


5

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.


0

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.


1
Willkommen bei DevOps.se Alexey. In diesem Fall kann Ihr Tool dem Benutzer helfen. Damit dies hier beantwortet werden kann, sollte ein wenig mehr vorhanden sein, um zu veranschaulichen, wie relevant dies für die Frage ist. Ansonsten sieht es aus wie eine reine Linkwerbung.
Küken

Hallo! Klar, nur mehr Details gegeben.
Alexey Melezhik

Dies ist aus meiner Sicht nichts anderes als das, was Rundeck leisten kann und ist für diese Frage nicht relevant. Insbesondere, da die Antwort nicht erklärt, wie die Prüfung von Tausenden von Servern und die Warnung vor einer Abweichung oder die Vorlage eines lesbaren Berichts für einen Prüfer durch eine analysierbare Ausgabe gelöst werden kann. Nach dem, was ich gerade gelesen habe, kann es nicht mehr, als inspec (zum Beispiel) kann, und es liefert weniger brauchbare Ausgabe im Maßstab, während es eine Menge externer Werkzeuge benötigt, um die Arbeit zu erledigen und damit weniger portabel zu sein.
Tensibai

"Wie kann es das Auditing von tausend Servern lösen
?

"und über eine Abweichung informiert zu werden oder einem Prüfer einen für den Menschen lesbaren Bericht vorzulegen, indem er eine analysierbare Ausgabe liefert." Auch das habe ich in der Frage nicht gefunden. Die offensichtliche Warnung vor dem Driften ist die Tatsache, dass die Tests zu scheitern beginnen ...
Alexey Melezhik
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.