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
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.
192.168.56.101 email.example.com server[01:50].example.org [windows] 192.168.56.110
Abb. 1: Eintrag in der /etc/ansible/hosts
ansible_user: ordix ansible_password: ordix9876 ansible_port: 5986 ansible_connection: winrm ansible_winrm_server_cert_validation: ignore
Kommandozeile
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).
- name: Some tasks with ansible hosts: windows tasks: - name: Create a temp directory win_file: path='C:\temp' state=directory - name: Create a registry entry win_regedit: key: HKCU:\Software\ORDIX value: Windows data: 10 - name: Restart spooler service win_service: name: spooler state: restarted
Abb. 4: Inhalt von example.yml
PLAY [Some tasks with ansible] ************************ TASK [Create a temp directory] ************************ changed: [192.168.56.110] TASK [Create a registry entry] ************************ changed: [192.168.56.110] TASK [Restart spooler service] ************************ changed: [192.168.56.110] PLAY RECAP ******************************************** 192.168.56.110 : ok=3 changed=3 unreachable=0 failed=0
Fazit
Links/Quellen
[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
Bei Updates im Blog, informieren wir per E-Mail.
Kommentare