Select Page

Was ist Ansible Semaphore?

by | Jul 5, 2023 | Ansible, IT Automation

Als Open Source Consultants müssen meine Kolleg:innen und ich uns regelmäßig mit neuen Technologien, Tools oder anderen Neuerungen auseinandersetzen. Dabei testen wir besonders neue Software die uns und unseren Kund:innen das Leben potenziell leichter machen können oder Tools, die gerade einen Hype erfahren. Dadurch können wir qualifiziert entscheiden, was wir in unsere tägliche Arbeit einfließen lassen und was nicht. Das Tool mit dem ich in den letzten Tagen beschäftigt habe ist Ansible Semaphore, das ich euch in meinem ersten Blogbeitrag für NETWAYS vorstellen darf.

Was ist Ansible Semaphore?

Semaphore ist eine Web-UI, in der Ansible-Playbooks ausgeführt und geplant werden können. Es bietet eine Übersicht über vorhandene Playbooks und Inventories sowie eine Funktion zur Planung von regelmäßigen Tasks. Außerdem werden auf dem Dashboard Informationen angezeigt, wann welche Tasks zuletzt ausgeführt wurden und ob sie erfolgreich waren. Um dir einen Überblick über Semaphore zu geben, gehe ich im Folgenden auf die wichtigsten Elemente ein stelle sie dir vor.

Installation von Semaphore

Semaphore ist als Snap, Deb oder RPM Paket verfügbar. Damit bedienen die Entwickler:innen alle gängigen Betriebssysteme. Zudem stellt Semaphore eine Docker-Compose-Datei bereit, um es als Docker-Container zu installieren. Die einzelnen Schritte für jede Installationsform in diesem Blogpost zu veröffentlichen würde den geplanten Rahmen sprengen. Deshalb verweise ich hier sehr gerne auf die offizielle Ansible Semaphore Installationsanleitung.

Ansible Semaphore konfigurieren

Nach der Installation kann Semaphore hast du zwei Optionen dein neues Tool zu konfigurieren:

  • Über die Kommandozeile
  • Über eine config.json Datei

Auch bei der Benutzerverwaltung haben die Entwickler:innen auf zwei bekannte Verwaltungsmöglichkeiten gesetzt: Manuelle Verwaltung und eine LDAP Anbindung. Semaphore stellt zusätzlich eine API-Schnittstelle zur Verfügung, über die User:innen Ansible Semaphore konfigurieren und steuern können. Mehr über die Konfiguration und wie genau du sie durchführst erfährst du in der API-Dokumentation von Semaphore.

Benutzeroberfläche von Semaphore

Bei einer Web-UI kommt es vor allem auf eines an: Übersichtlichkeit. Und das schafft Semaphore ganz gut. Nach dem erfolgreichen Einloggen bekommst du folgende Oberfläche angezeigt: Die Weboberfläche von Semaphore. Man sieht 3 gelaufene Tasks, einer ist erfolgreich gelaufen, die anderen sind fehlgeschlagen. An der linken Seite gibt es eine bläuliche Menüleiste, in der die Punkte Die von mir gezeigte Oberfläche hat schon ein paar Tasks im Dashboard. Bei einer frischen Installation ist es noch leer, eine Demo-Konfiguration ist also nicht vorhanden. Dafür bietet Semaphore eine interaktive Demo-Oberfläche, auf der du dich mit der neuen Umgebung vertraut machen und erst kleine Aufgaben testen kannst. Um zu veranschaulichen, wie eine Produktivumgebung von Semaphore aussehen kann, habe ich drei Beispieltasks erstellt. Eine ist erfolgreich gelaufen, die anderen beiden sind fehlgeschlagen. Dadurch kann ich euch passende Beispiele für die Darstellung des Status zeigen. Neben der Darstellung der der Tasks ist auf der linken Seite eine türkis/blaue Menüleiste mit den Menüpunkten “Dashboard”, “Task Templates”, “Inventory” “Environment”, “Key Store”, “Repositories” und “Team”. Ganz unten in der Leiste gibt es einen Slider für einen Dark Mode und du bekommst angezeigt mit welchem User du angemeld bist. Die Oberfläche ist ja schön und gut, aber wie erstelle ich jetzt Tasks? Dafür musst du noch vier Parameter konfigurieren:

Keys

Im Key Store können SSH-Keys und Benutzer-Passwort-Paare abgelegt werden. Diese werden verwendet, um sich bei den Servern, auf denen die Ansible-Playbooks ausgeführt werden, zu authentifizieren. Die Keys werden auch zur Authentifizierung bei den Repositories verwendet, in denen die Playbooks liegen.

Inventories

Inventories enthalten, wie bei klassischem Ansible, die Server/Hosts, auf denen die Playbooks ausgeführt werden sollen. Inventories können entweder direkt in der Oberfläche angelegt werden oder auf dem Host-System von Semaphore abgelegt werden.

Environments

In Semaphore können verschiedene Environments angelegt werden, in denen Environment-Variablen gesetzt werden können.

Repositories

Die Playbooks, die verwendet werden sollen, müssen über Git-Repositories eingebunden werden. Diese Repositories können auf Git-Servern oder als lokale Repositories auf dem Host-System vorliegen. Zum Einbinden von Repositories wird ein Access Key aus dem Key Store benötigt. Bei Repositories, die über ssh eingebunden werden, ist dies ein privater SSH-Key. Bei HTTPS-Repositories muss ein Access Key vom Typ “None” eingebunden werden, der nichts beinhaltet, aber angelegt sein muss. Somit können nur öffentliche Repositories über HTTPS eingebunden werden.

Erstellen und Ausführen von Tasks

Sobald alle oben genannten Komponenten eingerichtet sind, können “Task Templates” erstellt werden. Anders als bei Ansible bestimmen Tasks in Semaphore, welche Playbooks ausgeführt werden. Ein Task Template umfasst:

  • Was passiert: Welches Playbook verwendet wird
  • Wo es passiert: Welches Inventory verwendet wird
  • Wie es passiert: Welches Environment verwendet wird
  • Wann es passiert: Planung durch Cron

Es gibt drei Arten von Templates: Task, Build,Deploy

  • Normale Tasks führen einfach Playbooks aus
  • Builds werden verwendet, um Artefakte (z.B. Packages oder Docker Container) zu erstellen. Semaphore unterstützt die Artefakterstellung nicht von Haus aus, das Build Template liefert lediglich eine Versionierung.
  • Deploys werden verwendet, um mit Build erstellte Artefakte zu deployen/installieren. Deploy Templates werden immer mit Build Templates verknüpft. Dadurch kann eine bestimmte Version des Artefakte auf den spezifizierten Servern installiert werden.

Nachdem das Task-Template erstellt wurde, drückt man einfach auf “Play”! Semaphore bietet die Möglichkeit, die Playbooks im Debug-Modus (ansible-playbook –vvvv), als Dry-Run (–check) oder im “Diff”-Modus (–diff) auszuführen. Der bekannte Output von Ansible wird dann angezeigt und kann auch nach dem Durchlauf eingesehen werden. Dadurch kann man bei einem fehlgeschlagenen Play nachsehen, welcher Fehler aufgetreten ist.

Fazit

Semaphore eignet sich meiner Ansicht nach zum gemeinsamen Arbeiten mit den gleichen Playbooks. Durch das benutzerfreundliche Interface erhält man schnell einen Überblick über die Ausführung von Tasks auf verschiedenen Geräten und deren Erfolg.  Die Cron-Funktion der Tasks ermöglicht eine regelmäßige Ausführung, was beispielsweise beim Aktualisieren von installierten Paketen nützlich ist. Es besteht allerdings auch noch Verbesserungsbedarf. Bei der Arbeit kann es hinderlich sein, dass private Git-Repositories nicht über HTTPS eingebunden werden können, da keine Authentifizierung möglich ist. Die “CI”-Funktionen mit den Build- und Deploy-Tasks werfen auch noch einige Fragen auf und sind vielleicht noch nicht ganz ausgereift. Wenn du dir jetzt denkst, dass sich Ansible Semaphore eigentlich ganz interessant anhört, du aber wissen willst wie es sich im Vergleich mit den GUI-Tools Rundeck und AWX beweist, dann habe ich gute Nachrichten für dich: Ich habe genau diese drei Tools miteinander verglichen und mein persönliches Fazit gezogen. Das Ergebnis meines Tests liest du im entsprechenden Blogpost.

Lucy Siemer
Lucy Siemer
Consultant

Lucy ist seit Mai 2023 bei NETWAYS als Consultant tätig, nachdem sie im Jahr 2022 ihre Ausbildung zur Fachinformatikerin für Systemintegration erfolgreich abgeschlossen hat. Ihre Schwerpunkte liegen auf den Bereichen Kubernetes, Infrastructure as Code und Monitoring. Neben ihrer Arbeit bei NETWAYS betreut Lucy auch privat ihre eigene Infrastruktur auf Kubernetes. Darüber hinaus ist sie leidenschaftlich daran interessiert, eigene Kleider zu nähen und individuelle Designs zu kreieren.

0 Comments

Submit a Comment

Your email address will not be published. Required fields are marked *

More posts on the topic Ansible | IT Automation

Kritischer Fehler in Puppet Version 7.29.0 und 8.5.0

Eine Warnung an alle Nutzer von Puppet, aber auch Foreman oder dem Icinga-Installer, die Version 7.29.0 und 8.5.0 von Puppet enthält einen kritischen Fehler, der die Erstellung eines Katalogs und somit die Anwendung der Konfiguration verhindert. Daher stellt bitte...

Foreman Birthday Event 2023 – Recap

Two years ago I started my recap of the event with "Last week on Thursday we had the Foreman Birthday event and I can proudly say it was a big success." and I can do the same for this one. At the beginning of the year planning for the event started in the background...

Foreman Birthday Event 2023 – Save the date

I can happily announce we will have a Birthday event on 27.07. this year again. I will be our host again, supported by my colleagues from NETWAYS, ATIX and the Foreman Project. When I talked to people at Cfgmgmtcamp, I was told by many that they really liked the...