Anche se Ansible è conosciuto per gestire nodi Linux tramite SSH, sapevi che Ansible su Windows funziona altrettanto bene? Utilizzando Windows Remote Management (WinRM), Ansible su Windows può gestire efficacemente tutti i tuoi nodi Windows!
Con Ansible su Windows, puoi eseguire attività come distribuire patch, gestire server Windows, eseguire script PowerShell e altro ancora.
In questo tutorial, imparerai come configurare il tuo primo nodo Windows da gestire con Ansible e vedrai come eseguire comandi e playbooks su di esso.
Prerequisiti
Se desideri seguire il tutorial, assicurati di avere quanto segue prima di iniziare:
- Un host controller Ansible – Questo tutorial utilizzerà Ansible v2.9.18 su una macchina Ubuntu 18.04.5 LTS con indirizzo IP 10.111.4.53. Nota che Windows non è supportato come nodo di controllo, solo come nodo gestito.
- Python installato sull’host controller Ansible – Questo tutorial utilizzerà Python v2, ma v3 dovrebbe funzionare altrettanto bene.
- Il pacchetto pip installato sul controller Ansible.
- 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.
- Il server Windows da gestire ha l’abilitazione al PowerShell Remoting
- A user account in the local Administrators group on the Windows computer. This tutorial will use an account called adminuser.
Configurare il listener WinRM su Windows
Prima che Ansible possa comunicare con un nodo Windows remoto, deve essere in grado di stabilire una connessione con esso. Ciò avviene tramite il protocollo Microsoft WinRM. WinRM è lo stesso protocollo che viene utilizzato per eseguire comandi remoti da PowerShell.
Al momento della stesura di questo testo, Ansible supporta SSH come protocollo di gestione, ma è una funzionalità sperimentale.
Per consentire ad Ansible di utilizzare WinRM per comunicare con il nodo Windows, è necessario configurare WinRM. A tal scopo, Ansible fornisce uno script PowerShell che imposta varie opzioni di WinRM.
Sebbene lo script PowerShell fornito da Red Hat per configurare WinRM sia stato testato ed è sicuro, è consigliabile leggerlo e comprenderne, a grandi linee, il funzionamento.
Il tuo primo compito sarà scaricare lo script di configurazione ed eseguire Ansible sul nodo Windows. Per farlo, assumendo che tu abbia già abilitato PowerShell Remoting sul tuo computer Windows di destinazione e che tu sia su una postazione di lavoro Windows:
Scarica lo script PowerShell ConfigureRemotingForAnsible.ps1 sul tuo computer locale Windows. Questo tutorial presumirà che sia salvato in ~\Downloads.
Esegui lo script di configurazione sul nodo Windows che Ansible gestirà usando il comando Invoke-Command
. Il comando seguente eseguirà il comando sui due computer dimostrativi del tutorial e ti chiederà la password per l’account adminuser locale sui nodi Windows.
Per impostazione predefinita, lo script di configurazione configurerà WinRM per l’autenticazione di base HTTP. Se desideri che Ansible utilizzi una connessione più sicura, impara Come configurare WinRM tramite HTTPS per Ansible.
Configurazione del Controller di Ansible su Windows
Ora che il nodo Windows è pronto per Ansible, configuriamo il controller di Ansible per mostrare ad Ansible come comunicare con esso.
1. Connettiti al tuo host controller di Ansible via SSH usando il tuo client SSH preferito.
2. Installa il modulo Python pywinrm. Il modulo Python pywinrm è necessario affinché Ansible su Windows comunichi con gli host tramite il protocollo WinRM.
3. Definire i nodi Windows remoti in un file di inventario di Ansible. Un inventario di Ansible è una collezione di host remoti definiti in un file tramite il loro nome host o indirizzo IP. Una volta definiti, è possibile indirizzare gli inventari di Ansible con comandi e playbook, come vedrete presto.
Il file di inventario predefinito di Ansible si trova nella directory /etc/ansible/hosts.
Il file di inventario di esempio qui di seguito crea un gruppo di host
windows che contiene ciascun nodo Windows. Il tutorial utilizza un gruppo di host qui per semplificare il targeting di tutti i nodi Windows (se ne hai più di uno) contemporaneamente in seguito.
4. Successivamente, definire alcune variabili obbligatorie che Ansible utilizzerà durante la connessione agli host Windows nel file di inventario come gruppo windows:vars
.
5. Ora, utilizza il modulo win_ping di Ansible per eseguire un semplice test di connessione agli host all’interno del gruppo host windows
definito nel passo #3.
Una volta eseguito, puoi vedere di seguito che Ansible restituisce testo verde con un messaggio SUCCESS che indica il tentativo di ping riuscito.

L’output conferma che l’host controller di Ansible può comunicare con successo con l’host remoto Windows tramite WinRM.
Esecuzione di comandi ad-hoc sugli host Windows
A questo punto, sei pronto per far iniziare ad Ansible il controllo dei tuoi nodi Windows. Testiamo ora ciò eseguendo un comando ad-hoc sugli host Windows per cambiarli. I comandi ad-hoc sono ottimi quando è necessario eseguire un comando semplice su nodi senza creare prima un playbook.
Dimostriamo i comandi ad-hoc installando una funzionalità Windows sugli host Windows definiti nel file di inventario nel gruppo host windows
. Per farlo, assumendo che tu sia ancora connesso tramite SSH al tuo nodo controller di Ansible:
1. Invece del modulo win_ping questa volta, chiama il modulo win_feature (-m
), passandogli due argomenti (-a
) di nome
e stato
indicando il nome della funzionalità di Windows e lo stato in cui desideri che sia.
Quando esegui il comando sopra, se tutto va bene, Ansible dovrebbe connettersi a tutti i nodi nel gruppo di host windows
ed eseguire il comando win_feature su ciascuno controllando, e se non presente, installando la funzionalità di Windows Telnet-Client
.

2. Ansible mostra successo, ma per essere sicuri, connettiti manualmente ai nodi Windows con PowerShell e verifica che ora sia installata la funzionalità di Windows Telnet Client. Sulla tua workstation Windows locale, esegui Invoke-Command
per eseguire il comando PowerShell Get-WindowsFeature
su ciascun computer Windows.
A questo punto, puoi eseguire qualsiasi modulo Windows che ti piace come comandi ad-hoc!
Creazione ed esecuzione di playbook Ansible su Windows
Una volta che hai padroneggiato l’arte di eseguire comandi ad-hoc su nodi gestiti da Windows, il tuo compito successivo è creare e eseguire i playbook. Un playbook di Ansible combina comandi in un unico punto e ti permette di scrivere logica complessa per eseguire scenari di automazione complessi.
Esecuzione di Comandi Windows Remoti con il Modulo win_command
Assumendo che tu sia ancora connesso al tuo host controller di Ansible:
1. Crea una cartella nella tua directory home chiamata ansible-windows-demo e cambia in essa. Questa cartella conterrà il tuo playbook.
2. Apri il tuo editor di testo preferito e crea e salva un file chiamato ansible-windows.yml nella directory ~/ansible-windows-demo.
I playbook di Ansible sono scritti in YAML
3. Ora, copia il playbook sottostante nel file ansible-windows.yml per creare un singolo task. Questo playbook eseguirà il comando Windows netstat utilizzando il modulo Ansible di Windows win_command su tutti gli host all’interno del gruppo host windows
.
Il modulo win_command esegue comandi sull’host remoto di Windows. Non consente comandi che includono variabili come caratteri speciali, interruzioni di riga, simboli maggiori, ecc.
4. Eseguire il playbook ansible-windows.yml, che esegue il compito sull’host remoto eseguendo il seguente comando.
Se tutto è andato bene, dovresti vedere un output come di seguito.

Esecuzione di comandi PowerShell remoti con il modulo win_shell
Hai creato un playbook per eseguire un comando remoto cmd.exe (netstat) su nodi gestiti Windows
nell’esempio precedente. Adesso alziamo un po’ il livello e eseguiamo comandi PowerShell utilizzando il modulo win_shell.
Per impostazione predefinita, il modulo win_shell viene eseguito su PowerShell sull’host Windows
Sulla tua postazione locale Windows:
1. Prima, apri il tuo editor di testo preferito sulla tua postazione locale Windows e crea uno script PowerShell di esempio e copia il seguente codice al suo interno, salvandolo come one.ps1. Questo tutorial salverà lo script in ~\one.ps1.
Il codice sottostante crea un file di testo vuoto chiamato test2.txt nella directory C:\temp.
2. Copia lo script PowerShell one.ps1 sui nodi gestiti Windows utilizzando il tuo metodo preferito. Questo tutorial supporrà che tu abbia copiato lo script one.ps1 nella cartella C:\Temp su ogni nodo Windows.
3. Una volta che lo script PowerShell di esempio è sul(i) nodo(i) Windows, connettiti al tuo host controller Ansible e riapri il tuo editor di testo preferito. Questa volta, crea e salva un altro playbook chiamato ansible-windows-shell.yml nella stessa directory ~/ansible-windows-demo.
4. Copia e incolla il seguente playbook nel file ansible-windows-shell.yml. Questo playbook eseguirà due attività per dimostrare il modulo win_shell. Invoca lo script PowerShell appena copiato dal passaggio n. 2 e inserisce il codice PowerShell direttamente nel playbook per dimostrare che lo script non è affatto necessario.
Per passare più righe di codice PowerShell al modulo win_shell, utilizza il carattere
|
pipe.
5. Ora, invoca il secondo playbook ansible-windows-shell.yml, che si esegue sull’host remoto ma con PowerShell.

6. Se necessario, sul tuo computer locale Windows, verifica che il playbook abbia eseguito lo script esistente e il codice PowerShell nel playbook.
Se il playbook di Ansible è stato eseguito correttamente, PowerShell dovrebbe restituire due dichiarazioni True
che indicano che i file esistono ora.
Conclusione
In questo tutorial, hai imparato come configurare il tuo primo nodo gestito Windows in Ansible. Anche se Ansible è tradizionalmente conosciuto come strumento Linux, può essere facilmente utilizzato anche per Windows!
Quali playbook e moduli Windows inizierai ad utilizzare per gestire Windows con Ansible?