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" }