Ansible Windows servers

Om Windows servers te beheren met Ansible dienen er een aantal stappen genomen te worden. Omdat Windows niet werkt met een SSH protocol voor Ansible maar met WinRM dienen we dat in te stellen, samen met credential settings, zowel op de Ansible master als op de te beheren Windows nodes.

Ansible host

Mocht het nog niet ingesteld zijn, installeer de epel-release om python-pip te kunnen installeren:

sudo yum install -y epel-release
sudo yum -y update
sudo pip install pywinrm

Hierna gaan we een inventory-bestand maken met hierin de verwijzingen naar de Windows servers, genaamd inventory:

[windows]
hyper-v01.digitalinfo.local
ess01.digitalinfo.local
app01.digitalinfo.local
file01.digitalinfo.local

De Ansible master dient uiteraard wel deze FQDN’s te kunnen resolven, via de /etc/resolv.conf of via de /etc/hosts file.

Vervolgens zetten we de variabelen in een group_vars directory, in het bestand windows.yml:

---
ansible_user: ansible
ansible_password: #### wijzig dit wachtwoord ####
ansible_port: 5985
ansible_connection: winrm
ansible_winrm_scheme: http
ansible_winrm_server_cert_validation: ignore

Je ziet hier het gebruik van een lokale Windows gebruiker genaamd ‘ansible’ en die gaan we dan ook op de Windows-servers toevoegen. Deze gebruiker maken we ook lid van de lokale ‘Administrators’ groep. Indien je gebruik wilt maken van Kerberos authentication, lees dan hier hoe je dat kunt instellen.

Windows Servers

Hiervoor kan de Command Prompt (met ‘Administrative Rights’ openen) gebruikt worden:

NET USER ansible "password" /ADD
NET LOCALGROUP "Administrators" "ansible" /ADD

Op elke Windows server dient vervolgens WinRM ingesteld te worden en we doen dit m.b.v. een Command-Prompt (met ‘Administrative Rights’ openen). We gaan dan de ansible-server toevoegen als TrustedHost en de Basic Authentication op True zetten:

winrm s winrm/config/client @{TrustedHosts="ansible.digitalinfo.local"}
winrm s winrm/config/client @{AllowUnencrypted="True"}
winrm s winrm/config/service/auth @{Basic="True"}
winrm s winrm/config/service @{AllowUnencrypted="True"}

Start Powershell met ‘elevated rights’ en geef het volgende commando:

Enable-PSRemoting -force

Nu kunnen we controleren of we met Ansible bij de Windows nodes kunnen met:

ansible windows -m win_ping

Het resultaat:

hyper-v01.digitalinfo.local | SUCCESS => {
 "changed": false,
 "failed": false,
 "ping": "pong"
}
ess01.digitalinfo.local | SUCCESS => {
 "changed": false,
 "failed": false,
 "ping": "pong"
}
app01.digitalinfo.local | SUCCESS => {
 "changed": false,
 "failed": false,
 "ping": "pong"
}
file01.digitalinfo.local | SUCCESS => {
 "changed": false,
 "failed": false,
 "ping": "pong"
}