Ansible ist ein leistungsfähiges Open-Source-Tool für die IT-Automatisierung. Während es häufig für Linux-Systeme eingesetzt wird, unterstützt es auch die Verwaltung und Bereitstellung von Windows-Systemen. In diesem Blog-Beitrag erfährst du, wie du Windows-Server mit Ansible verwalten und ein Windows-Deployment automatisieren kannst. Ich werde dabei die grundlegenden Schritte zur Konfiguration von Ansible für Windows sowie einige nützliche Beispiele für Playbooks behandeln.
Voraussetzungen
Bevor wir mit dem Deployment von Windows beginnen, sind einige grundlegende Anforderungen zu erfüllen:
- Ansible-Controller: Ansible läuft auf einem Linux-System als Steuerknoten (Controller), da Windows nicht als Ansible-Steuerknoten unterstützt wird.
- Windows-Hosts: Zielsysteme müssen Windows Server oder eine Windows-Version mit Remote Management-Diensten (z. B. Windows 10, Windows Server 2016/2019) sein.
- Python: Auf dem Windows-Zielsystem ist kein Python erforderlich, da Ansible mit dem PowerShell-Remoting-Protokoll (WinRM) kommuniziert.
- WinRM: Windows Remote Management (WinRM) muss auf den Windows-Zielhosts konfiguriert und aktiviert sein.
WinRM auf dem Windows-Zielsystem einrichten
Zuerst musst du WinRM auf deinen Windows-Hosts aktivieren. Dies kannst du über die PowerShell-Befehle erreichen:
# WinRM auf dem Zielsystem konfigurieren
winrm quickconfig
Set-Item -Path WSMan:\localhost\Service\AllowUnencrypted -Value $true
Set-Item -Path WSMan:\localhost\Service\Auth\Basic -Value $true
Restart-Service winrm
Alternativ kannst du auch das Ansible Windows Setup Script verwenden, um diese Konfiguration automatisiert durchzuführen.
Konfiguration von Ansible für Windows
Ansible nutzt das WinRM-Protokoll für die Kommunikation mit Windows-Systemen. Dafür müssen wir einige Einstellungen in der ansible.cfg
und in der Inventar-Datei vornehmen.
Ansible-Konfigurationsdatei anpassen
In der ansible.cfg
musst du die Verbindungseinstellungen für Windows festlegen. Hier ein Beispiel:
[defaults]
inventory = ./inventory
remote_user = Administrator
connection = winrm
timeout = 60
[winrm]
transport = ntlm
server_cert_validation = ignore
Ansible-Inventory für Windows-Hosts
In der Inventar-Datei (z. B. inventory
) definierst du die IP-Adressen oder Hostnamen deiner Windows-Zielsysteme sowie die benötigten Variablen:
[windows]
192.168.1.10
192.168.1.11
[windows:vars]
ansible_user=Administrator
ansible_password=DeinPasswort
ansible_port=5985
ansible_connection=winrm
ansible_winrm_transport=ntlm
ansible_winrm_server_cert_validation=ignore
Dies sagt Ansible, dass es sich mit den Windows-Hosts über WinRM verbinden soll und gibt Benutzername sowie Passwort an.
Grundlegendes Windows-Playbook
Nachdem die Konfiguration abgeschlossen ist, können wir ein einfaches Playbook erstellen, um sicherzustellen, dass Ansible auf dem Windows-Host funktioniert. Erstelle eine Datei windows_deployment.yml
und füge den folgenden Inhalt hinzu:
---
- name: Einfaches Windows-Playbook
hosts: windows
tasks:
- name: Überprüfe die Erreichbarkeit des Windows-Hosts
win_ping:
- name: Installiere ein Windows-Feature
win_feature:
name: Web-Server
state: present
- name: Erstelle eine neue Datei auf dem Windows-Host
win_file:
path: C:\Temp\testfile.txt
state: touch
Erklärung:
win_ping
: Testet die Verbindung zu den Windows-Hosts. Ähnlich wie derping
-Befehl für Linux-Hosts.win_feature
: Installiert das Windows-Feature „Web-Server“ (IIS), was nützlich ist, wenn du beispielsweise einen Webserver einrichten möchtest.win_file
: Erstellt eine Datei auf dem Zielhost unterC:\Temp\testfile.txt
.
Playbook ausführen
Du kannst das Playbook nun mit dem folgenden Befehl ausführen:
ansible-playbook windows_deployment.yml
Wenn alles korrekt eingerichtet ist, wird Ansible das Playbook ausführen und die entsprechenden Änderungen auf den Windows-Hosts vornehmen.
Fortgeschrittenes Windows-Deployment
Nun, da wir die Grundlagen der Windows-Verwaltung mit Ansible abgedeckt haben, können wir uns komplexeren Aufgaben widmen, wie z. B. dem Deployment von Software, dem Ändern von Registry-Werten und dem Neustarten von Diensten.
Beispiel: Software installieren
Du kannst Ansible nutzen, um Software auf Windows-Hosts zu installieren. Hier ein Beispiel für die Installation von Google Chrome mit dem win_package
-Modul:
---
- name: Installiere Google Chrome auf Windows-Hosts
hosts: windows
tasks:
- name: Lade das Installationspaket herunter
win_get_url:
url: https://dl.google.com/chrome/install/standalone_installer64.exe
dest: C:\Temp\chrome_installer.exe
- name: Installiere Google Chrome
win_package:
path: C:\Temp\chrome_installer.exe
product_id: '{4DC8B4CA-1F31-11E8-9579-6397CA7E614D}'
state: present
Beispiel: Windows-Dienst verwalten
Ein weiterer wichtiger Anwendungsfall für Ansible auf Windows ist die Verwaltung von Windows-Diensten. Hier ein Beispiel, wie du einen Dienst starten kannst:
---
- name: Windows-Dienst verwalten
hosts: windows
tasks:
- name: Starte den Windows Update-Dienst
win_service:
name: wuauserv
start_mode: auto
state: started
Beispiel: Registry ändern
Mit dem win_regedit
-Modul kannst du auch die Windows-Registry ändern:
---
- name: Ändere einen Registry-Wert
hosts: windows
tasks:
- name: Setze den Proxy-Server in der Registry
win_regedit:
path: HKLM:\Software\Microsoft\Windows\CurrentVersion\Internet Settings
name: ProxyServer
data: '192.168.1.100:8080'
type: string
Fazit
Mit Ansible kannst du nicht nur Linux-Server, sondern auch Windows-Systeme automatisiert verwalten. Durch die Verwendung von WinRM und den speziellen Windows-Modulen wie win_feature
, win_package
und win_service
hast du eine mächtige und flexible Möglichkeit, deine Windows-Infrastruktur zu managen.
Die hier vorgestellten Playbooks sind nur der Anfang. Ansible bietet viele weitere Funktionen und Module für Windows, um Softwareverteilung, Updates, Konfiguration und vieles mehr effizient zu automatisieren.