Obwohl Ansible dafür bekannt ist, Linux-Knoten mit SSH zu verwalten, wussten Sie, dass Ansible auf Windows genauso gut funktioniert? Mit Windows Remote Management (WinRM) kann Ansible auf Windows effektiv alle Ihre Windows-Knoten verwalten!
Mit Ansible auf Windows können Sie Aufgaben wie das Bereitstellen von Patches, das Verwalten von Windows-Servern, das Ausführen von PowerShell-Skripten und mehr ausführen.
In diesem Tutorial erfahren Sie, wie Sie Ihren ersten Windows-Knoten einrichten, der mit Ansible verwaltet werden soll, und wie Sie Befehle und Playbooks dagegen ausführen können.
Voraussetzungen
Wenn Sie dem Tutorial folgen möchten, stellen Sie bitte sicher, dass Sie Folgendes haben, bevor Sie beginnen:
- Einen Ansible-Controller-Host – In diesem Tutorial wird Ansible v2.9.18 auf einem Ubuntu 18.04.5 LTS-Rechner mit der IP-Adresse 10.111.4.53 verwendet. Beachten Sie, dass Windows nicht als Steuerknoten unterstützt wird, sondern nur als verwalteter Knoten.
- Python installiert auf Ihrem Ansible-Controller-Host – In diesem Tutorial wird Python v2 verwendet, aber v3 sollte genauso gut funktionieren.
- Das Paket pip installiert auf dem Ansible-Controller.
- A Windows 2012 R2 or greater computer for Ansible to manage – This tutorial will use two Windows Server 2012 R2 Standard machines as remote nodes with IP addresses of 52.242.251.213 and 10.111.4.106.
- A Windows workstation – This tutorial will perform some basic pre-configuration to the node that Windows will manage with Ansible and will require you to sitting at a Windows workstation.
- Der zu verwaltende Windows-Server hat PowerShell Remoting aktiviert
- A user account in the local Administrators group on the Windows computer. This tutorial will use an account called adminuser.
Einrichten des WinRM-Listeners auf Windows
Bevor Ansible mit einem entfernten Windows-Knoten kommunizieren kann, muss es eine Verbindung dazu herstellen können. Dies geschieht über das Microsoft-Protokoll WinRM. WinRM ist dasselbe Protokoll, das PowerShell Remoting verwendet, um Remote-Befehle von innerhalb von PowerShell auszuführen.
Zum Zeitpunkt dieses Schreibens unterstützt Ansible SSH als Verwaltungsprotokoll, aber es handelt sich um eine experimentelle Funktion zu diesem Zeitpunkt.
Damit Ansible WinRM zur Kommunikation mit dem Windows-Knoten verwenden kann, müssen Sie WinRM konfigurieren. Hierzu bietet Ansible ein PowerShell-Skript an, das verschiedene WinRM-Optionen festlegt.
Obwohl das PowerShell-Skript, das von Red Hat bereitgestellt wird, um WinRM zu konfigurieren, getestet wurde und sicher ist, sollten Sie es durchlesen und auf einer hohen Ebene verstehen, was es tut.
Ihre erste Aufgabe wird darin bestehen, das Konfigurationsskript herunterzuladen und Ansible auf dem Windows-Knoten auszuführen. Dazu, unter der Annahme, dass Sie bereits PowerShell Remoting aktiviert haben auf Ihrem Ziel-Windows-Computer und Sie sich an einer Windows-Arbeitsstation befinden:
Laden Sie das ConfigureRemotingForAnsible.ps1 PowerShell-Skript auf Ihren lokalen Windows-Computer herunter. In diesem Tutorial wird angenommen, dass es unter ~\Downloads gespeichert ist.
Führen Sie das Konfigurationsskript auf dem Windows-Knoten aus, den Ansible verwalten wird, indem Sie das Invoke-Command
-Befehl verwenden. Der folgende Befehl führt den Befehl auf den beiden Demomaschinen des Tutorials aus und fordert Sie auf, das Kennwort für das lokale adminuser-Konto auf den Windows-Knoten einzugeben.
Standardmäßig konfiguriert das Konfigurationsskript WinRM für die grundlegende HTTP-Authentifizierung. Wenn Sie möchten, dass Ansible eine sicherere Verbindung verwendet, erfahren Sie, wie Sie WinRM über HTTPS für Ansible konfigurieren.
Konfigurieren des Controllers von Ansible auf Windows
Jetzt, da der Windows-Knoten für Ansible bereit ist, konfigurieren wir den Ansible-Controller, um Ansible zu zeigen, wie er mit ihm kommunizieren soll.
1. Verbinden Sie sich über SSH mit Ihrem bevorzugten SSH-Client mit Ihrem Ansible-Controller-Host.
2. Installieren Sie das pywinrm-Python-Modul. Das pywinrm-Python-Modul ist erforderlich, damit Ansible auf Windows über das WinRM-Protokoll mit Hosts kommunizieren kann.
3. Definieren Sie die entfernten Windows-Knoten in einer Ansible-Inventardatei. Ein Ansible-Inventar ist eine Sammlung von Remote-Hosts, die in einer Datei entweder nach ihrem Hostnamen oder ihrer IP-Adresse definiert sind. Sobald definiert, können Sie dann mit Befehlen und Playbooks auf Ansible-Inventare abzielen, wie Sie bald sehen werden.
Die Standard-Ansible-Inventardatei befindet sich im Verzeichnis /etc/ansible/hosts.
Die folgende Beispieldatei wird mit einer windows
Hostgruppe erstellt, die jeden Windows-Knoten enthält. Das Tutorial verwendet hier eine Hostgruppe, um es später einfacher zu machen, alle Windows-Knoten (falls vorhanden) auf einmal anzusprechen.
4. Definieren Sie als nächstes einige erforderliche Variablen, die Ansible verwenden wird, wenn es sich mit den Windows-Hosts in der Inventardatei verbindet, als windows:vars
-Gruppe.
5. Verwenden Sie nun das Ansible win_ping Modul, um einen einfachen Verbindungstest zu den Hosts innerhalb der windows
Hostgruppe durchzuführen, wie in Schritt #3 definiert.
Nach der Ausführung sehen Sie unten, dass Ansible grünen Text mit einer ERFOLG-Nachricht zurückgibt, die den erfolgreichen Ping-Versuch anzeigt.

Die Ausgabe bestätigt, dass der Ansible-Controller-Host erfolgreich über WinRM mit dem Windows-Remote-Host kommunizieren kann.
Ausführung von Ad-hoc-Befehlen auf Windows-Hosts
Zu diesem Zeitpunkt sind Sie bereit, Ansible zu nutzen, um Ihre Windows-Knoten zu steuern. Lassen Sie uns das nun testen, indem wir einen Ad-hoc-Befehl auf den Windows-Knoten ausführen, um sie zu ändern. Ad-hoc-Befehle sind großartig, wenn Sie einen einfachen Befehl auf Knoten ausführen müssen, ohne zuerst ein Playbook zu erstellen.
Wir demonstrieren Ad-hoc-Befehle, indem wir ein Windows-Feature auf den in der Inventardatei definierten Windows-Knoten installieren. Dazu, vorausgesetzt, Sie sind immer noch per SSH mit Ihrem Ansible-Controller-Knoten verbunden:
1. Anstelle des win_ping-Moduls rufen Sie dieses Mal das win_feature-Modul (-m
) auf und übergeben ihm zwei Argumente (-a
) für name
und state
, die den Namen des Windows-Features und den gewünschten Zustand angeben.
Wenn Sie den obigen Befehl ausführen, sollte Ansible bei Erfolg eine Verbindung zu allen Knoten in der Hostgruppe windows
herstellen und auf jedem den Befehl win_feature ausführen, um das Windows-Feature Telnet-Client
zu überprüfen und falls nicht vorhanden, zu installieren.

2. Ansible zeigt Erfolg an, aber um sicher zu gehen, stellen Sie manuell eine Verbindung zu den Windows-Knoten mit PowerShell her und überprüfen Sie, ob das Windows-Feature „Telnet Client“ jetzt installiert ist. Führen Sie auf Ihrer lokalen Windows-Workstation Invoke-Command
aus, um den PowerShell-Befehl Get-WindowsFeature
auf jedem Windows-Computer auszuführen.
Zu diesem Zeitpunkt können Sie jedes Windows-Modul als Ad-hoc-Befehle ausführen!
Erstellen und Ausführen von Ansible auf Windows-Playbooks
Sobald Sie die Kunst des Ausführens von Ad-hoc-Befehlen auf Windows-Verwaltungsinstanzen gemeistert haben, ist Ihre nächste Aufgabe, Playbooks zu erstellen und auszuführen. Ein Ansible-Playbook kombiniert Befehle an einem einzigen Ort und ermöglicht es Ihnen, komplexe Logik zu schreiben, um komplexe Automatisierungsszenarien durchzuführen.
Ausführen von Remote-Windows-Befehlen mit dem win_command-Modul
Vorausgesetzt, Sie sind immer noch mit Ihrem Ansible-Controller-Host verbunden:
1. Erstellen Sie einen Ordner unter Ihrem Home-Verzeichnis namens ansible-windows-demo und wechseln Sie dorthin. Dieser Ordner wird Ihr Playbook enthalten.
2. Öffnen Sie Ihren bevorzugten Texteditor und erstellen Sie eine Datei namens ansible-windows.yml im Verzeichnis ~/ansible-windows-demo und speichern Sie sie.
Ansible-Playbooks werden in YAML geschrieben.
3. Kopieren Sie nun das folgende Playbook in die Datei ansible-windows.yml, um eine einzelne Aufgabe zu erstellen. Dieses Playbook wird den netstat-Windows-Befehl mithilfe des win_command-Windows-Ansible-Moduls auf allen Hosts in der windows
-Hostgruppe ausführen.
Das Modul win_command führt Befehle auf einem entfernten Windows-Host aus. Es erlaubt keine Befehle, die Variablen wie Sonderzeichen, Zeilenumbrüche, das Größer-als-Zeichen usw. enthalten.
4. Rufen Sie das Playbook ansible-windows.yml auf, das die Aufgabe auf dem Remote-Host ausführt, indem Sie den folgenden Befehl ausführen.
Wenn alles gut gelaufen ist, sollte die Ausgabe wie folgt aussehen.

Ausführen von Remote-PowerShell-Befehlen mit dem win_shell-Modul
Sie haben ein Playbook erstellt, um einen Remote-cmd.exe-Befehl (netstat
) auf verwalteten Windows
-Knoten im vorherigen Beispiel auszuführen. Lassen Sie uns jetzt etwas mehr Gas geben und PowerShell-Befehle mit dem win_shell-Modul ausführen.
Standardmäßig wird das win_shell-Modul auf PowerShell auf dem Windows-Host ausgeführt.
Auf Ihrem lokalen Windows-Arbeitsplatz:
1. Öffnen Sie zuerst Ihren bevorzugten Texteditor auf Ihrem lokalen Windows-Arbeitsplatz und erstellen Sie ein Beispiel für ein PowerShell-Skript und kopieren Sie den folgenden Code hinein, speichern Sie ihn als one.ps1. Dieses Tutorial wird das Skript unter ~\one.ps1 speichern.
Der unten stehende Code erstellt eine leere Textdatei namens test2.txt im Verzeichnis C:\temp.
2. Kopieren Sie das PowerShell-Skript one.ps1 auf Ihre verwalteten Windows-Knoten mit Ihrer bevorzugten Methode. Dieses Tutorial geht davon aus, dass Sie das Skript one.ps1 in den Ordner C:\Temp auf jedem Windows-Knoten kopiert haben.
3. Sobald das Beispiel für das PowerShell-Skript auf dem Windows-Knoten oder den Windows-Knoten vorhanden ist, stellen Sie eine Verbindung zu Ihrem Ansible-Controller-Host her und öffnen Sie erneut Ihren bevorzugten Texteditor. Erstellen Sie dieses Mal ein weiteres Playbook namens ansible-windows-shell.yml im selben ~/ansible-windows-demo-Verzeichnis und speichern Sie es.
4. Kopieren Sie das folgende Playbook in die Datei ansible-windows-shell.yml. Dieses Playbook führt zwei Aufgaben aus, um das Modul win_shell zu demonstrieren. Es ruft das PowerShell-Skript auf, das gerade im Schritt #2 kopiert wurde, auf und fügt den PowerShell-Code direkt in das Playbook ein, um zu zeigen, dass das Skript überhaupt nicht benötigt wird.
Um mehrere Zeilen PowerShell-Code an das Modul win_shell zu übergeben, verwenden Sie das Zeichen
|
(senkrechter Strich).
5. Rufen Sie jetzt das zweite Playbook ansible-windows-shell.yml auf, das auf dem Remote-Host, jedoch mit PowerShell, ausgeführt wird.

6. Überprüfen Sie bei Bedarf auf Ihrem lokalen Windows-Arbeitsplatz, ob das Playbook das vorhandene Skript und den PowerShell-Code im Playbook ausgeführt hat.
Wenn das Ansible-Playbook erfolgreich ausgeführt wurde, sollte PowerShell zwei True
-Anweisungen zurückgeben, die anzeigen, dass die Dateien jetzt vorhanden sind.
Schlussfolgerung
In diesem Tutorial haben Sie gelernt, wie Sie Ihren ersten von Ansible verwalteten Windows-Knoten einrichten. Obwohl Ansible traditionell als Linux-Tool bekannt ist, kann es auch problemlos für Windows verwendet werden!
Welche Playbooks und Windows-Module werden Sie verwenden, um Windows mit Ansible zu verwalten?