Nonostante Ansible sia noto per la gestione dei 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 compiti come distribuire patch, gestire server Windows, eseguire script PowerShell e altro ancora.
In questo tutorial, imparerai come configurare il tuo primo nodo Windows per essere gestito con Ansible e vedrai come eseguire comandi e playbook 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 un indirizzo IP di 10.111.4.53. Nota che Windows non è supportato come nodo di controllo, solo come nodo gestito.
- Python installato sul tuo 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 PowerShell Remoting abilitato
- A user account in the local Administrators group on the Windows computer. This tutorial will use an account called adminuser.
Configurazione del listener WinRM su Windows
Prima che Ansible possa comunicare con un nodo Windows remoto, deve essere in grado di stabilire una connessione con esso. Fa ciò attraverso il protocollo Microsoft WinRM. WinRM è lo stesso protocollo che utilizza il PowerShell Remoting per eseguire comandi remoti da PowerShell.
Al momento della stesura di questo testo, Ansible non supporta SSH come protocollo di gestione, ma è una funzionalità sperimentale in questo momento.
Per consentire ad Ansible di utilizzare WinRM per comunicare con il nodo Windows, è necessario configurare WinRM. Per fare ciò, Ansible fornisce uno script PowerShell che imposta diverse opzioni di WinRM.
Anche se lo script PowerShell fornito da Red Hat per configurare WinRM è stato testato ed è sicuro, è consigliabile leggerlo e comprendere, a grandi linee, cosa fa.
Il tuo primo compito sarà scaricare lo script di configurazione ed eseguire Ansible sul nodo Windows. Per fare ciò, presumendo che tu abbia già abilitato il PowerShell Remoting sul tuo computer Windows di destinazione e ti trovi in una postazione di lavoro Windows:
Scarica lo script PowerShell ConfigureRemotingForAnsible.ps1 sul tuo computer locale Windows. Questo tutorial supporrà che sia salvato in ~\Downloads.
Esegui lo script di configurazione sul nodo Windows che Ansible gestirà utilizzando il comando Invoke-Command
. Il comando seguente eseguirà il comando sui due computer demo 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 HTTP di base. 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 tramite SSH utilizzando il tuo client SSH preferito.
2. Installa il modulo Python pywinrm. Il modulo Python pywinrm è richiesto per permettere ad Ansible su Windows di comunicare con gli host tramite il protocollo WinRM.
3. Definire i nodi Windows remoti in un file di inventario Ansible. Un inventario Ansible è una raccolta di host remoti definiti in un file, sia tramite il nome host che l’indirizzo IP. Una volta definiti, è possibile indirizzare gli inventari Ansible con comandi e playbook, come vedrai presto.
Il file di inventario Ansible predefinito si trova nella directory /etc/ansible/hosts.
Il file di inventario di esempio di seguito è creato un windows
gruppo di host che contiene ciascun nodo Windows. Il tutorial sta utilizzando un gruppo di host qui per facilitare il targeting di tutti i nodi Windows (se ne hai più di uno) contemporaneamente in seguito.
4. Successivamente, definire alcune variabili richieste che Ansible utilizzerà quando si connette agli host Windows nel file di inventario come un windows:vars
gruppo.
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 passaggio n. 3.
Una volta eseguito, puoi vedere qui sotto 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 l’host remoto Windows con successo 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. Proviamo ora questo eseguendo un comando ad hoc sui nodi Windows per modificarli. I comandi ad hoc sono ottimi quando è necessario eseguire un comando semplice sui nodi senza creare prima un playbook.
Dimostriamo i comandi ad hoc installando una funzionalità di Windows sui nodi Windows definiti nel gruppo di host windows
nel file di inventario. 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 name
e state
indicando il nome della funzionalità di Windows e lo stato desiderato.
Quando esegui il comando sopra, se tutto va bene, Ansible dovrebbe connettersi a tutti i nodi nel gruppo host windows
ed eseguire il comando win_feature su ciascuno, verificando 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 la funzionalità client Telnet di Windows sia ora installata. Sul tuo computer locale Windows, esegui Invoke-Command
per eseguire il comando PowerShell Get-WindowsFeature
su ciascun computer Windows.
A questo punto, puoi eseguire qualsiasi modulo di Windows che desideri come comandi ad-hoc!
Creazione ed Esecuzione di Playbook Ansible su Windows
Una volta padroneggiato l’arte di eseguire comandi ad hoc sui nodi gestiti da Windows, il tuo compito successivo è quello di creare ed eseguire i playbook.. Un playbook di Ansible combina comandi in un unico luogo e ti consente di scrivere logiche complesse per eseguire scenari di automazione complessi.
Esecuzione di Comandi Windows Remoti con il Modulo win_command
Supponendo che tu sia ancora connesso all’host del controller 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 qui sotto nel file ansible-windows.yml per creare un singolo task. Questo playbook eseguirà il comando netstat di Windows utilizzando il modulo Windows Ansible win_command su tutti gli host all’interno del gruppo host windows
.
Il modulo win_command esegue comandi sull’host remoto Windows. Non permette comandi che includono variabili come caratteri speciali, interruzioni di riga, il simbolo maggiore, ecc.
4. Esegui il playbook ansible-windows.yml, che esegue il compito sull’host remoto eseguendo il seguente comando.
Se tutto è andato bene, dovresti vedere un output simile a quello seguente.

Esecuzione di Comandi PowerShell Remoti con il Modulo win_shell
Hai creato un playbook per eseguire un comando remoto cmd.exe (netstat
) sui nodi gestiti di Windows
nell’esempio precedente. Ora alziamo un po’ l’asticella e eseguiamo comandi PowerShell utilizzando il modulo win_shell.
Di default il modulo win_shell viene eseguito su PowerShell sull’host Windows
Sul tuo computer locale Windows:
1. Per prima cosa, apri il tuo editor di testo preferito sulla tua postazione locale Windows e crea uno script di esempio PowerShell e copia il seguente codice al suo interno, salvandolo come one.ps1. Questo tutorial salverà lo script in ~\one.ps1.
Il codice qui sotto crea un file di testo vuoto chiamato test2.txt nella directory C:\temp.
2. Copia lo script PowerShell one.ps1 sui nodi Windows gestiti utilizzando il tuo metodo preferito. Questo tutorial presume che tu abbia copiato lo script one.ps1 nella cartella C:\Temp su ciascun nodo Windows.
3. Una volta che lo script PowerShell di esempio è sui nodi Windows, connettiti all’host del controller di Ansible e apri di nuovo il tuo editor di testo preferito. Questa volta, crea e salva un’altra playbook chiamata ansible-windows-shell.yml nella stessa directory ~/ansible-windows-demo.
4. Copia e incolla la seguente playbook nel file ansible-windows-shell.yml. Questa playbook eseguirà due attività per dimostrare il modulo win_shell. Invoca lo script PowerShell appena copiato dal passaggio n. 2 e inserisce direttamente nel playbook il codice PowerShell per dimostrare che lo script non è affatto necessario.
Per passare più righe di codice PowerShell al modulo win_shell, usa 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
indicando che i file ora esistono.
Conclusione
In questo tutorial, hai imparato come configurare il tuo primo nodo gestito Windows in Ansible. Anche se Ansible è tradizionalmente noto come uno strumento Linux, può essere facilmente utilizzato anche per Windows!
Quali playbook e moduli Windows inizierai a utilizzare per gestire Windows con Ansible?