Obwohl Ansible dafür bekannt ist, Linux-Nodes mit SSH zu verwalten, wussten Sie, dass Ansible auf Windows genauso gut funktioniert? Mithilfe von Windows Remote Management (WinRM) kann Ansible auf Windows effektiv alle Ihre Windows-Nodes 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 durchführen.
In diesem Tutorial erfahren Sie, wie Sie Ihren ersten Windows-Node einrichten, der mit Ansible verwaltet wird, 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 auf Ihrem Ansible-Controller-Host installiert – In diesem Tutorial wird Python v2 verwendet, aber v3 sollte genauso gut funktionieren.
- Das pip-Paket 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 unter Windows
Bevor Ansible mit einem entfernten Windows-Knoten kommunizieren kann, muss es in der Lage sein, eine Verbindung zu ihm herzustellen. Dies geschieht über das Microsoft-Protokoll WinRM. WinRM ist das gleiche Protokoll, das PowerShell Remoting verwendet, um Remote-Befehle innerhalb von PowerShell auszuführen.
Zum Zeitpunkt dieses Schreibens unterstützt Ansible zwar SSH als Verwaltungsprotokoll, aber es handelt sich dabei zurzeit um ein experimentelles Feature.
Damit Ansible WinRM zur Kommunikation mit dem Windows-Knoten verwenden kann, müssen Sie WinRM konfigurieren. Dazu stellt Ansible ein PowerShell-Skript bereit, das verschiedene WinRM-Optionen festlegt.
Obwohl das von Red Hat bereitgestellte PowerShell-Skript zur Konfiguration von WinRM getestet wurde und sicher ist, sollten Sie es durchlesen und auf hohem Niveau verstehen, was es tut.
Ihre erste Aufgabe besteht darin, das Konfigurationsskript herunterzuladen und Ansible auf dem Windows-Knoten auszuführen. Gehen Sie davon aus, dass Sie bereits PowerShell Remoting aktiviert haben auf Ihrem Ziel-Windows-Computer und Sie an einem Windows-Arbeitsplatz sind:
Downloaden Sie das PowerShell-Skript ConfigureRemotingForAnsible.ps1 auf Ihren lokalen Windows-Computer. Dieses Tutorial geht davon aus, dass es in ~\Downloads gespeichert ist.
Führen Sie das Konfigurationsskript auf dem Windows-Knoten aus, den Ansible verwalten wird, und verwenden Sie dazu den Befehl Invoke-Command
. Der folgende Befehl wird das Kommando auf den beiden Demomaschinen des Tutorials ausführen und Sie nach dem Passwort für das lokale adminuser-Konto auf den Windows-Knoten fragen.
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 Sie den Ansible-Controller, um ihm zu zeigen, wie er mit Ansible kommunizieren soll.
1. Verbinden Sie sich über SSH mit Ihrem Ansible-Controller-Host unter Verwendung Ihres bevorzugten SSH-Clients.
2. Installieren Sie das Python-Modul pywinrm. Das Python-Modul pywinrm ist erforderlich, damit Ansible unter 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 entfernten Hosts, die in einer Datei entweder durch ihren Hostnamen oder ihre IP-Adresse definiert sind. Sobald sie definiert sind, können Sie Ansible-Inventare mit Befehlen und Playbooks anvisieren, wie Sie bald sehen werden.
Die Standard-Ansible-Inventardatei befindet sich im Verzeichnis /etc/ansible/hosts.
Die folgende Beispielinventardatei erstellt eine windows
Hostgruppe, 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 eine Verbindung zu den Windows-Hosts in der Inventardatei herstellt, als windows:vars
-Gruppe.
5. Verwenden Sie nun das Ansible win_ping-Modul, um einen einfachen Verbindungstest mit den Hosts innerhalb der windows
-Hostgruppe auszuführen, die in Schritt #3 definiert wurde.
Nach der Ausführung können Sie unten sehen, dass Ansible grünen Text mit einer ERFOLG-Meldung zurückgibt, die den erfolgreichen Ping-Versuch anzeigt.

Die Ausgabe bestätigt, dass der Ansible-Controller-Host erfolgreich mit dem Windows-Remote-Host über WinRM kommunizieren kann.
Ausführen von Ad-hoc-Befehlen auf Windows-Hosts
Zu diesem Zeitpunkt sind Sie bereit, damit Ansible Ihre Windows-Knoten zu steuern. Lassen Sie uns dies 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.
Zeigen wir ad-hoc-Befehle, indem wir ein Windows-Feature auf den in der Bestandsdatei definierten Windows-Knoten installieren. Dazu, vorausgesetzt, dass Sie immer noch über SSH in Ihren Ansible-Controller-Knoten eingeloggt sind:
1. Anstelle des win_ping-Moduls rufen Sie dieses Mal das win_feature-Modul (-m
) auf und übergeben ihm zwei Argumente (-a
), nämlich name
und state
, die den Namen des Windows-Features und den gewünschten Zustand angeben.
Wenn Sie den obigen Befehl ausführen, sollte Ansible erfolgreich eine Verbindung zu allen Knoten in der windows
-Hostgruppe herstellen und den Befehl win_feature auf jedem ausführen, um das Windows-Feature Telnet-Client
zu überprüfen und, falls nicht vorhanden, zu installieren.

2. Ansible zeigt Erfolg an, aber um sicherzugehen, stellen Sie manuell eine Verbindung zu den Windows-Knoten über PowerShell her und überprüfen Sie, ob das Windows-Feature Telnet Client jetzt installiert ist. Auf Ihrem lokalen Windows-Arbeitsplatz führen Sie 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!
Erstellung und Ausführung von Ansible-Playbooks unter Windows
Sobald Sie die Kunst der Ausführung von Ad-hoc-Befehlen auf verwalteten Windows-Nodes gemeistert haben, besteht Ihre nächste Aufgabe darin, 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ührung 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 mit dem Namen ansible-windows-demo und wechseln Sie zu diesem. Dieser Ordner wird Ihr Playbook enthalten.
2. Öffnen Sie Ihren bevorzugten Texteditor, erstellen Sie eine Datei mit dem Namen ansible-windows.yml im Verzeichnis ~/ansible-windows-demo und speichern Sie sie.
Ansible-Playbooks werden in YAML geschrieben
3. Kopieren Sie nun das unten stehende Playbook in die Datei ansible-windows.yml, um eine einzelne Aufgabe zu erstellen. Dieses Playbook führt den Windows-Befehl netstat mithilfe des win_command-Moduls von Ansible auf allen Hosts in der Hostgruppe windows
aus.
Das Modul win_command führt Befehle auf einem Windows-Remote-Host aus. Es erlaubt keine Befehle, die Variablen wie Sonderzeichen, Zeilenumbrüche, größer als Symbol, 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, sollten Sie eine Ausgabe wie unten sehen.

Ausführen von Remote-PowerShell-Befehlen mit dem Modul win_shell
Sie haben ein Playbook erstellt, um einen Remote-cmd.exe-Befehl (netstat
) auf verwalteten Knoten unter Windows
im vorherigen Beispiel auszuführen. Lassen Sie uns jetzt ein wenig mehr riskieren und PowerShell-Befehle mit dem win_shell-Modul ausführen.
Standardmäßig wird das win_shell-Modul auf dem Windows-Host in PowerShell ausgeführt
Auf Ihrem lokalen Windows-Arbeitsplatz:
1. Zuerst öffnen Sie Ihren bevorzugten Texteditor auf Ihrem lokalen Windows-Arbeitsplatz und erstellen ein Beispiel-PowerShell-Skript und kopieren Sie den folgenden Code hinein, speichern Sie es als one.ps1. Dieses Tutorial wird das Skript unter ~\one.ps1 speichern.
Der untenstehende Code erstellt eine leere Textdatei namens test2.txt im Verzeichnis C:\temp.
2. Kopieren Sie das one.ps1 PowerShell-Skript 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 BeispielpowerShell-Skript auf dem Windows-Knoten ist, verbinden Sie sich mit Ihrem Ansible-Controller-Host und öffnen erneut Ihren bevorzugten Texteditor. Diesmal erstellen und speichern Sie ein weiteres Playbook namens ansible-windows-shell.yml im gleichen ~/ansible-windows-demo Verzeichnis.
4. Kopieren und fügen Sie das folgende Playbook in die Datei ansible-windows-shell.yml ein. Dieses Playbook führt zwei Aufgaben aus, um das win_shell Modul 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 des PowerShell-Codes an das win_shell-Modul zu übergeben, verwenden Sie das
|
Pipe-Zeichen.
5. Rufen Sie jetzt das zweite Playbook ansible-windows-shell.yml auf, das auf dem entfernten Host, aber 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
-Aussagen zurückgeben, die darauf hinweisen, dass die Dateien jetzt vorhanden sind.
Schlussfolgerung
In diesem Tutorial haben Sie gelernt, wie Sie Ihren ersten Windows-Managed-Knoten in Ansible einrichten. Obwohl Ansible traditionell als Linux-Tool bekannt war, kann es problemlos auch für Windows verwendet werden!
Welche Playbooks und Windows-Module werden Sie verwenden, um Windows mit Ansible zu verwalten?