Windows-Deployment

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:

  1. Ansible-Controller: Ansible läuft auf einem Linux-System als Steuerknoten (Controller), da Windows nicht als Ansible-Steuerknoten unterstützt wird.
  2. Windows-Hosts: Zielsysteme müssen Windows Server oder eine Windows-Version mit Remote Management-Diensten (z. B. Windows 10, Windows Server 2016/2019) sein.
  3. Python: Auf dem Windows-Zielsystem ist kein Python erforderlich, da Ansible mit dem PowerShell-Remoting-Protokoll (WinRM) kommuniziert.
  4. 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 der ping-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 unter C:\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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert