Ansible unter Windows

Rechner neu aufsetzen ist langweilig und blöd. Für die Lehrevaluation am Fachbereich braucht das Feedbackteam leider auch noch ein Windows Notebook. Da ich keine Lust habe den Rechner ein drittes Mal manuell aufzusetzen habe ich mich mal an Ansible versucht. Das heißt nicht, dass Ansible besonders gut geeignet dafür ist, sondern das es einfach innerhalb der Fachschaft seit neuestem verwendet wird.


Windows aufsetzen

Um den Installprozess kommt man leider nicht so einfach herum (#TODO fertig installiertes Image zum einfachen Aufspielen erstellen).

Windows Remote Management aktivieren

Nach der Installation muss man ein Skript von Ansible ausführen, damit Remote Zugriff auf die Powershell möglich ist. Das funktioniert, indem man mit der Administrator Powershell (über Windows + X oder über Rechtsklick auf das Startmenü) in den Ordner mit dem Skript wechselt und es mit .\ConfigureRemotingForAnsible.ps1 ausführt. Davor sollte aber auf jeden Fall ein passender Hostname gesetzt werden, damit das generierte Zertifikat (enthält als CN den aktuellen Hostname) auch passt. Hier kann schon das erste Problem auftreten, denn Windows lässt manchmal die Auführung von Skripten nicht zu. Mit dem Befehl Get-Execution-Policy erhält man die aktuelle Policy. Ist diese ‘Restricted’ kann man sie dann über das Kommando Set-Execution-Policy -ExecutionPolicy UNRESTRICTED ändern.

Zertifikatbasierte Authentifizierung

“Oh cool, kann man bei Windows auch so Sachen wie ssh keys benutzen?" Kann man, aber die Dokumentation ist unglaublich mies und es ist sehr schwierig umzusetzen.

[windows]
host01
host02 ansible_host=192.168.120.169

ansible_host ist notwendig, wenn der Hostname nicht durch einen DNS Server (oder einen Eintrag in der /etc/hosts aufgelöst wird.

Vault erstellen

Diverse Einstellungen sollten nicht im Klartext auf der Platte liegen, z.B. das Passwort. Deswegen hat Ansible ein System zur Verschlüsselung von sensitiven Variablen. Mit ansible-vault lassen sich Dateien verschlüsseln, welche Ansible dann während des Deployments wieder entschlüsselt und anwendet. Am Beispiel der Authentifizierung sieht ein möglicher Vault so aus:

  1. Erstellen des Ordners host_vars
  • Anlegen einer yml mit dem Hostnamen und dem folgendem Inhalt:

ansible_user: $USER
ansible_password: $supersecretpassword
ansible_port: 5986
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
3. Das Kommando ansible-vault encrypt host_vars/hostname.yml verschlüsselt den Vault.

Damit exisitiert nun ein Vault mit den wichtigsten Parametern zum Verbinden. Mit dem Befehl ansible hostname -i inventorydatei -m win_ping kann die Verbindung getestet werden.

Share