Hoewel Ansible bekend staat om het beheren van Linux-nodes via SSH, wist je dat Ansible op Windows net zo goed werkt? Met behulp 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 leer je hoe je je eerste Windows-node instelt om te worden beheerd met Ansible en zie je 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 machine met Ubuntu 18.04.5 LTS met het IP-adres 10.111.4.53. Let op: Windows wordt niet 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.
Het instellen van de WinRM-listener op Windows
Voor Ansible kan communiceren met een externe Windows-node, moet het in staat zijn om er verbinding mee te maken. Dit gebeurt via het Microsoft-protocol WinRM. WinRM is hetzelfde protocol dat PowerShell Remoting gebruikt om opdrachten op afstand uit te voeren vanuit PowerShell.
Op dit moment ondersteunt Ansible SSH als een beheerprotocol, maar het is op dit moment een experimentele functie.
Om WinRM te gebruiken om te communiceren met de Windows-node, moet u WinRM configureren. Hiervoor biedt Ansible een PowerShell-script dat verschillende WinRM-opties instelt.
Hoewel het PowerShell-script dat Red Hat levert om WinRM te configureren is getest en veilig is, moet u het doornemen en op hoofdlijnen begrijpen wat het doet.
Uw 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 u al PowerShell Remoting hebt ingeschakeld op uw doel-Windowscomputer en u zich bevindt op een Windows-werkstation:
Download het PowerShell-script ConfigureRemotingForAnsible.ps1 naar uw lokale Windows-computer. Deze handleiding 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 u om het wachtwoord vragen voor het lokale adminuser-account op de Windows-nodes.
Standaard configureert het configuratiescript WinRM voor basis HTTP-authenticatie. Als u wilt dat Ansible een veiligere verbinding gebruikt, lees dan Hoe WinRM over HTTPS te configureren voor Ansible.
Het configureren van de Controller van Ansible op Windows
Nu de Windows-node klaar is voor Ansible, laten we nu de Ansible-controller configureren om Ansible te laten weten hoe ermee te communiceren.
1. Maak verbinding met uw Ansible-controllerhost via SSH met behulp van uw 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-knooppunten in een Ansible inventarisbestand. Een Ansible inventaris is een verzameling externe hosts gedefinieerd in een bestand, ofwel op basis van hun hostnaam of IP-adres. Eenmaal gedefinieerd, kun je dan Ansible inventarissen targeten met commando’s en playbooks, zoals je binnenkort zult zien.
Het standaard Ansible inventarisbestand bevindt zich in de /etc/ansible/hosts directory.
Het onderstaande voorbeeld inventarisbestand creëert een windows
hostgroep die elk Windows-knooppunt bevat. In deze tutorial wordt hier een hostgroep gebruikt om het later gemakkelijker te maken om alle Windows-knooppunten (als je er meer dan één hebt) tegelijkertijd te targeten.
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 verbindingstest uit te voeren naar de hosts binnen de windows
hostgroep gedefinieerd in stap #3.
Zodra uitgevoerd, kunt u hieronder zien dat Ansible groene tekst retourneert met een SUCCES-bericht dat de succesvolle ping-poging aangeeft.

De uitvoer bevestigt dat de Ansible-controllerhost succesvol kan communiceren met de Windows-externe host via WinRM.
Het uitvoeren van ad-hoc commando’s op Windows-hosts
Op dit punt bent u helemaal klaar voor Ansible om uw Windows-nodes te gaan beheren. 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 de windows
hostgroep in het inventarisbestand. Om dit te doen, ervan uitgaande dat u nog steeds SSH hebt naar uw Ansible-controllerknooppunt:
1. In plaats van de win_ping module deze keer, roep de win_feature module aan (-m
), waarbij je twee argumenten (-a
) doorgeeft van name
en state
die de naam van de Windows functie en de gewenste status aangeven.
Wanneer je het bovenstaande commando uitvoert, zou Ansible, als alles goed gaat, verbinding moeten maken met alle knooppunten in de windows
hostgroep en het win_feature commando op elk knooppunt moeten uitvoeren om te controleren of, en zo niet, de Telnet-Client
Windows functie te installeren.

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. Voer op je lokale Windows werkstation Invoke-Command
uit om het Get-WindowsFeature
PowerShell commando op elk Windows-computer uit te voeren.
Op dit punt kun je elke Windows module uitvoeren die je maar wilt als ad-hoc commando’s!
Het maken en uitvoeren van Ansible op Windows Playbooks
Zodra je de kunst van het uitvoeren van ad-hoc opdrachten op Windows-beheerde knooppunten onder de knie hebt, is je volgende taak om playbooks te maken en uit te voeren. Een Ansible playbook combineert opdrachten op één plek en stelt je in staat om complexe logica te schrijven om complexe automatiseringsscenario’s uit te voeren.
Uitvoeren van externe Windows-opdrachten met het win_command Module
Assuming dat je nog steeds verbonden bent met je Ansible controller host:
1. Maak een map aan onder je home directory genaamd ansible-windows-demo en verander ernaar. Deze map zal je playbook bevatten.
2. Open je favoriete teksteditor en maak een bestand genaamd ansible-windows.yml aan in de map ~/ansible-windows-demo.
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 het win_command Windows Ansible-module op alle hosts binnen de windows
hostgroep.
De module win_command voert commando’s uit op een Windows-remotehost. Het staat geen commando’s toe die variabelen bevatten, zoals speciale tekens, een regelafbreker, het groter-dan-teken, enzovoort.
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 een uitvoer moeten zien zoals hieronder.

Het uitvoeren van externe PowerShell-commando’s met de win_shell-module
Je hebt een playbook gemaakt om een externe 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 voert de win_shell-module PowerShell uit op een Windows-host
Op je lokale Windows-werkstation:
1. Open eerst je favoriete teksteditor op je 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 PowerShell-script one.ps1 naar je beheerde Windows-nodes met je voorkeursmethode. Deze tutorial gaat ervan uit dat je het script one.ps1 naar de map C:\Temp op elke Windows-node hebt gekopieerd.
3. Zodra het voorbeeld PowerShell-script op de Windows-node(s) staat, verbind je met je Ansible-controllerhost en open je opnieuw je favoriete teksteditor. Maak dit keer een playbook aan en sla het op als ansible-windows-shell.yml in dezelfde ~/ansible-windows-demo map.
4. Kopieer en plak het volgende playbook in het bestand ansible-windows-shell.yml. Dit playbook zal twee taken uitvoeren 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 je het
|
-pipe-teken.
5. Voer nu het tweede playbook ansible-windows-shell.yml in, dat wordt uitgevoerd op de externe host maar met PowerShell.

6. Indien nodig, op uw lokale Windows-werkstation, verifieer dat 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
-verklaringen 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. Ook al staat Ansible traditioneel bekend als een Linux-tool, het kan ook gemakkelijk worden gebruikt voor Windows!
Welke playbooks en Windows-modules ga je gebruiken om Windows te beheren met Ansible?