Von ORDIX AG auf Dienstag, 13. Februar 2018
Kategorie: Data Management

Einfach. Einfacher. Ansible. Automatisierung mit Ansible

Schon in früheren Ausgaben wurde über Tools berichtet, welche eine automatisierte Administration ermöglichen. Diese waren BMC BladeLogic, Puppet und Ansible. Der Fokus lag dabei aber immer auf Unix-Systemen. In diesem Artikel wollen wir nun zeigen, dass sich auch Windows-Systeme automatisieren lassen.

Konzept

Bei Ansible wird eine Kontrollmaschine zentral eingesetzt, welche auf die entfernten Rechner zugreift und dort remote administrative Aufgaben erledigt. Dabei bilden sogenannte Module die Basis. Jedes Modul hat einen bestimmten Verwendungszweck. Zum Beispiel gibt es Module für den Zugriff auf das Dateisystem, damit Dateien erstellt oder gelöscht werden können. Zurzeit existieren ca. 800 Module, welche sich in unterschiedliche Kategorien aufteilen. Davon sind ca. 40 für Windows-Systeme konzipiert.

Installation

Da Ansible in Python geschrieben ist, kann jedes System, welches Python 2.6 oder 2.7 installiert hat, als Kontrollmaschine verwendet werden. Ausgenommen ist Windows. Der Support für Python 3 ist noch nicht umgesetzt. Derzeit existiert nur eine technische Preview. Für die Installation auf der Kontrollmaschine gibt es mehrere Wege. Ein Weg geht über die Paket-Repositories der Linux- bzw. Unix- Systeme.

Für Max OSX oder Systeme, die Ansible in ihren Paketquellen nicht enthalten haben, wird Pip empfohlen. Pip ist ein Paketmanager für Python-Pakete. Ein weiterer Weg geht über den Quellcode. Dieser muss heruntergeladen werden und diverse Abhängigkeiten müssen selbst nachinstalliert werden.

Konfiguration

Auf der Kontrollmaschine gibt es drei Konfigurationsschritte, die durchgeführt werden müssen. Der erste ist das Eintragen der entfernten Rechner, die administriert werden sollen. Dies geschieht z.B. in der Datei /etc/ansible/ hosts und werden Inventory genannt. Dort können einzelne IP-Adressen, Servernamen oder auch Gruppen eingetragen werden.
Gruppen werden durch die eckigen Klammern gekennzeichnet. Darunter werden dann die Rechner eingetragen. Neben der Gruppen ist es auch möglich durch sogenannte Pattern-Rechner zu adressieren (siehe Abbildung 1).
Der zweite Schritt ist das Hinterlegen der Nutzerdaten der Windows-Systeme. Diese braucht Ansible, damit es sich mit den Systemen verbinden kann. Dabei werden Benutzername, Passwort, Port und die Verbindungsmethode benötigt. Die Daten können in der Datei /etc/ansible/group_vars/windows.yml hinterlegt werden. Dabei muss die Datei den Namen der Gruppe mit den Windows-Systemen haben (siehe Abbildung 2).
Der dritte Schritt, sofern benötigt, ist die Konfiguration von Ansible selbst. In der Datei können zum Beispiel der Pfad des Inventory angepasst, die temporären Verzeichnisse geändert und der Pfad zu den Ansible-Bibliotheken bestimmt werden. Die Konfigurationsdatei von Ansible kann entweder unter /etc/ansible liegen oder im Home- Verzeichnis des Benutzerkontos, welches Ansible nutzen soll.

Auf den Windows-Systemen, welche administriert werden sollen, muss ein Powershellskript ausgeführt werden, welches von Ansible bereitgestellt wird [3]. Dieses Skript richtet Windows für die Administration mit Ansible ein. Dabei wird der Windows Remote Management Dienst (WinRM) aktiviert und die notwendige Version der Powershell geprüft. Zusätzlich werden Zugriffe via WINRM auf den Windows Host erlaubt​.

Abb. 1: Eintrag in der /etc/ansible/hosts

Abb. 2: Eintrag in der /etc/ansible/group_vars/windows.yml

Kommandozeile

Um Ansible zu nutzen kann die Kommandozeile verwendet werden. Als Beispiel sei hier ein Aufruf gezeigt, welcher überprüft, ob die Remote-Systeme online sind:

ansible windows –m win_ping

Der Aufruf beginnt mit dem Kommando, gefolgt von der IP-Adresse oder auch hier die Gruppe windows aus Abbildung 1. Danach wird das Modul angegeben, welches genutzt werden soll. Der Aufruf gibt in diesem Fall eine positive Rückmeldung (siehe Abbildung 3).
Ein anderes Beispiel sei hier das Erstellen einer Datei:

ansible windows –m win_file –a "path=C:\temp\ file.txt"

Dieser Aufruf erstellt eine Datei in einem Ordner temp unter dem Laufwerk C. Es können den Modulen auch Argumente übergeben werden. In diesem Fall der Pfad der Datei mit dem Dateinamen.

Playbooks

Für die automatisierte Ausführung einzelner administrativer Schritte existieren sogenannte Playbooks. Diese werden in der YAML-Syntax erstellt. In Abbildung 4 ist ein Beispiel zu sehen. Es wird ein Verzeichnis erstellt, die Registry bearbeitet und der Spooler-Dienst neu gestartet. Der Aufruf, sofern der Inhalt in der Datei example.yml abgespeichert ist, lautet:

ansible-playbook example.yml

Bei dem Aufruf werden die einzelnen Schritte nacheinander abgearbeitet. Bei der Ausgabe wird der Endstatus von jeder Aufgabe ausgegeben. Es gibt drei mögliche Ausgaben: changed, ok und failed. Changed bedeutet, dass etwas geändert wurde. Zum Beispiel beim Erstellen des Ordners temp. Ok tritt auf, wenn nichts geändert wurde und kein Fehler entstanden ist. Dies wäre der Fall, wenn der Ordner temp schon existieren würde. Failed wird ausgegeben, wenn ein Fehler aufgetreten ist. Nachdem alle Aufgaben abgearbeitet wurden, wird eine Zusammenfassung pro Rechner ausgegeben (siehe Abbildung 5).

Abb. 4: Inhalt von example.yml

Abb. 5: Ausgabe von example.ymlk

Fazit

Wie gezeigt werden konnte, ist das Einrichten und Bedienen von Ansible kein großer Aufwand und nicht schwer. Auch wenn der Anteil der Windows-Module noch nicht sonderlich hoch ist, so kann schon viel mit Ansible automatisiert werden. Mehr erfahren Sie in unserem Blog und in unserem Seminar zu Ansible​.

Links/Quellen

[1] ORDIX® news Artikel 02/2013 – „BMC BladeLogic Server Automation – Homo(gen) oder Hetero(gen)?" https://www.ordix.de/ordix-news-archiv/2-2013.html
[2] ORDIX® news Artikel 01/2016: „Konfigurationsmanagement mit Puppet" https://www.ordix.de/ordix-news-archiv/1-2016.html
[3] Powershellskript zur Einrichtung von Ansible-Remote-Management https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1
Kommentare hinterlassen