Hoewel Ansible bekend staat om het beheren van Linux-nodes via SSH, wist je dat Ansible op Windows net zo goed werkt? Door gebruik te maken van Windows Remote Management (WinRM) kan Ansible op Windows effectief al je Windows-nodes beheren!
Met Ansible op Windows kun je taken uitvoeren zoals het implementeren van patches, het beheren van Windows-servers, het uitvoeren van PowerShell-scripts en meer.
In deze tutorial ga je leren hoe je je eerste Windows-node kunt instellen om te worden beheerd met Ansible en hoe je opdrachten en playbooks er tegen kunt uitvoeren.
Vereisten
Als je de tutorial wilt volgen, zorg er dan voor dat je het volgende hebt voordat je begint:
- Een Ansible-controllerhost – Deze tutorial zal Ansible v2.9.18 gebruiken op een Ubuntu 18.04.5 LTS-machine met een IP-adres van 10.111.4.53. Merk op dat Windows niet wordt ondersteund als een controleknooppunt, alleen als een beheerd knooppunt.
- Python geïnstalleerd op je Ansible-controllerhost – Deze tutorial zal Python v2 gebruiken, maar v3 zou net zo goed moeten werken.
- De pip-pakket geïnstalleerd op de Ansible-controller.
- A Windows 2012 R2 or greater computer for Ansible to manage – This tutorial will use two Windows Server 2012 R2 Standard machines as remote nodes with IP addresses of 52.242.251.213 and 10.111.4.106.
- A Windows workstation – This tutorial will perform some basic pre-configuration to the node that Windows will manage with Ansible and will require you to sitting at a Windows workstation.
- De Windows-server die moet worden beheerd heeft PowerShell Remoting ingeschakeld
- A user account in the local Administrators group on the Windows computer. This tutorial will use an account called adminuser.
WinRM-listener instellen op Windows
Voordat Ansible kan communiceren met een externe Windows-node, moet het in staat zijn om er verbinding mee te maken. Dit doet het via het Microsoft-protocol WinRM. WinRM is hetzelfde protocol dat PowerShell Remoting gebruikt om externe opdrachten uit te voeren binnen PowerShell.
Ten tijde van dit schrijven ondersteunt Ansible SSH als een beheerprotocol, maar het is op dit moment een experimentele functie.
Voor Ansible om WinRM te gebruiken om te communiceren met de Windows-node, moet je WinRM configureren. Om dit te doen, biedt Ansible een PowerShell-script dat verschillende WinRM-opties instelt.
Hoewel het PowerShell-script dat Red Hat biedt om WinRM te configureren is getest en veilig is, moet je het doorlezen en op een hoog niveau begrijpen wat het doet.
Je eerste taak zal zijn om het configuratiescript te downloaden en Ansible uit te voeren op de Windows-node. Om dat te doen, ervan uitgaande dat je al PowerShell Remoting ingeschakeld hebt op je doel-Windows-computer en je op een Windows-werkstation bent:
Download het PowerShell-script ConfigureRemotingForAnsible.ps1 naar je lokale Windows-computer. Deze tutorial gaat ervan uit dat het is opgeslagen in ~\Downloads.
Voer het configuratiescript uit op de Windows-node die Ansible zal beheren met behulp van het Invoke-Command
-commando. Het onderstaande commando zal het commando uitvoeren op de twee demomachines van de tutorial en zal je om het wachtwoord vragen voor het lokale adminuser-account op de Windows-nodes.
Standaard configureert het configuratiescript WinRM voor basis HTTP-authenticatie. Als je wilt dat Ansible een veiligere verbinding gebruikt, leer dan Hoe WinRM over HTTPS te configureren voor Ansible.
Het configureren van de controller van Ansible op Windows
Nu de Windows-node gereed is voor Ansible, laten we de Ansible-controller nu configureren om Ansible te laten zien hoe ermee te communiceren.
1. Maak verbinding met je Ansible-controllerhost via SSH met behulp van je favoriete SSH-client.
2. Installeer de pywinrm-Python-module. De pywinrm-Python-module is vereist voor Ansible op Windows om te communiceren met hosts via het WinRM-protocol.
3. Definieer de externe Windows-nodes in een Ansible-inventarisbestand. Een Ansible-inventaris is een verzameling externe hosts die gedefinieerd zijn in een bestand, met hun hostnaam of IP-adres. Nadat ze zijn gedefinieerd, kun je vervolgens commando’s en playbooks richten op Ansible-inventarissen, zoals je binnenkort zult zien.
Het standaard Ansible-inventarisbestand bevindt zich in de /etc/ansible/hosts map.
Het onderstaande voorbeeldinventarisbestand is een windows
hostgroep die elke Windows-node bevat. In deze tutorial wordt een hostgroep gebruikt om het gemakkelijker te maken om later alle Windows-nodes (indien er meer dan één is) tegelijkertijd te richten.
4. Definieer vervolgens een paar vereiste variabelen die Ansible zal gebruiken bij het verbinden met de Windows-hosts in het inventarisbestand als een windows:vars
groep.
5. Gebruik nu de Ansible win_ping module om een eenvoudige verbindings test uit te voeren naar de hosts binnen de windows
hostgroep gedefinieerd in stap #3.
Zodra uitgevoerd, kunt u hieronder zien dat Ansible groene tekst teruggeeft met een SUCCES bericht dat de succesvolle ping poging aangeeft.

De uitvoer bevestigt dat de Ansible controller host succesvol kan communiceren met de Windows externe host via WinRM.
Het uitvoeren van ad-hoc commando’s op Windows hosts
Op dit moment bent u klaar voor Ansible om uw Windows nodes te gaan besturen. Laten we dit nu testen door een ad-hoc commando uit te voeren op de Windows nodes om ze te wijzigen. Ad-hoc commando’s zijn handig wanneer u een eenvoudig commando op nodes moet uitvoeren zonder eerst een playbook te maken.
Laten we ad-hoc commando’s demonstreren door een Windows functie te installeren op de Windows nodes gedefinieerd in het inventaris bestand in de windows
hostgroep. Om dat te doen, ervan uitgaande dat u nog steeds ingelogd bent op uw Ansible controller node:
1. In plaats van de win_ping-module deze keer, roep de win_feature-module aan (-m
), waarbij je twee argumenten (-a
) doorgeeft met name
en state
om de naam van de Windows-functie en de gewenste status aan te geven.
Wanneer je bovenstaand commando uitvoert, zou Ansible, als alles goed gaat, verbinding moeten maken met alle knooppunten in de hostgroep windows
en het win_feature-commando op elk knooppunt moeten uitvoeren, controlerend op, en zo nodig installeren van de Telnet-Client
-Windows-functie.

2. Ansible toont succes, maar om zeker te zijn, maak handmatig verbinding met de Windows-knooppunten met PowerShell en controleer of de Telnet Client Windows-functie nu is geïnstalleerd. Op je lokale Windows-werkstation voer je Invoke-Command
uit om het Get-WindowsFeature
-PowerShell-commando op elk Windows-computer uit te voeren.
Op dit punt kun je elk willekeurig Windows-module als ad-hoc commando uitvoeren!
Creëren en uitvoeren van Ansible op Windows Playbooks
Zodra je de kunst van het uitvoeren van ad-hoc commando’s op beheerde Windows-nodes onder de knie hebt, is je volgende taak het maken en uitvoeren van playbooks. Een Ansible playbook combineert commando’s op één plek en stelt je in staat om complexe logica te schrijven om complexe automatiseringsscenario’s uit te voeren.
Het uitvoeren van externe Windows-commando’s met de win_command-module
Als je nog steeds verbonden bent met je Ansible-controllerhost:
1. Maak een map aan onder je thuismap genaamd ansible-windows-demo en ga er naartoe. Deze map zal je playbook bevatten.
2. Open je favoriete teksteditor en maak een bestand genaamd ansible-windows.yml in de map ~/ansible-windows-demo en sla het op.
Ansible-playbooks worden geschreven in YAML
3. Kopieer nu het onderstaande playbook naar het bestand ansible-windows.yml om een enkele taak te maken. Dit playbook zal het netstat Windows-commando uitvoeren met behulp van de win_command-module voor Windows Ansible op alle hosts binnen de windows
-hostgroep.
De module win_command voert commando’s uit op een Windows externe host. Het staat geen commando’s toe die variabelen bevatten, zoals speciale tekens, regelonderbrekers, groter-dan-symbolen, enz.
4. Roep het playbook ansible-windows.yml aan, dat de taak op de externe host uitvoert door het volgende commando uit te voeren.
Als alles goed is gegaan, zou je output moeten zien zoals hieronder.

Uitvoeren van externe PowerShell-commando’s met de win_shell-module
Je hebt een playbook gemaakt om een extern cmd.exe-commando (netstat
) uit te voeren op beheerde knooppunten van Windows
in het vorige voorbeeld. Laten we nu de lat iets hoger leggen en PowerShell-commando’s uitvoeren met de win_shell-module.
Standaard wordt de win_shell-module uitgevoerd in PowerShell op een Windows-host
Op je lokale Windows-werkstation:
1. Eerst, open uw favoriete teksteditor op uw lokale Windows-werkstation en maak een voorbeeld PowerShell-script en kopieer de volgende code erin, sla het op als one.ps1. Deze tutorial zal het script opslaan als ~\one.ps1.
De onderstaande code maakt een leeg tekstbestand genaamd test2.txt in de map C:\temp.
2. Kopieer het one.ps1 PowerShell-script naar uw beheerde Windows-nodes met uw voorkeursmethode. Deze tutorial gaat ervan uit dat u het one.ps1 script naar de C:\Temp map op elke Windows-node heeft gekopieerd.
3. Zodra het voorbeeld PowerShell-script op de Windows-node(s) staat, maak verbinding met uw Ansible-controllerhost en open opnieuw uw favoriete teksteditor. Maak deze keer een ander playbook genaamd ansible-windows-shell.yml in dezelfde ~/ansible-windows-demo map en sla het op.
4. Kopieer en plak het volgende playbook in het bestand ansible-windows-shell.yml. Dit playbook voert twee taken uit om de win_shell module te demonstreren. Het roept het PowerShell-script aan dat zojuist is gekopieerd vanuit stap #2 en voegt de PowerShell-code rechtstreeks in het playbook in om te demonstreren dat het script helemaal niet nodig is.
Om meerdere regels PowerShell code door te geven aan de win_shell module, gebruik de
|
pijplijnkarakter.
5. Roep nu het tweede playbook ansible-windows-shell.yml aan, dat op de externe host wordt uitgevoerd maar met PowerShell.

6. Indien nodig, op uw lokale Windows-werkstation, verifieer of het playbook het bestaande script en de PowerShell-code in het playbook heeft uitgevoerd.
Als het Ansible-playbook succesvol is uitgevoerd, zou PowerShell twee True
-uitspraken moeten retourneren die aangeven dat de bestanden nu bestaan.
Conclusie
In deze tutorial heb je geleerd hoe je je eerste Windows-beheerde knooppunt instelt in Ansible. Hoewel Ansible traditioneel bekend staat als een Linux-tool, kan het ook gemakkelijk voor Windows worden gebruikt!
Welke playbooks en Windows-modules ga je gebruiken om Windows te beheren met Ansible?