Ansible: installazione, configurazione e utilizzo con Windows e Linux

Ansible è un software Open Source per la gestione della configurazione multipiattaforma (Linux, Windows, apparati di rete, ecc.).

In altre parole, Ansible ti consentirà di gestire, distribuire o persino eseguire azioni su un gruppo di computer in un’unica “riga di comando”.

Le azioni/configurazioni sono scritte in un file in formato YAML chiamato anche playbook.

Attraverso questo tutorial ti spiegherò come installare Ansible, poi vedremo come creare il nostro inventario (computer) e finiremo con la creazione di diversi playbook.

Entro la fine di questo tutorial, spero di averti convinto a utilizzare Ansible e sarai in grado di creare i tuoi playbook.

Prerequisiti

Per questo tutorial avrai bisogno di una macchina Linux per installare Ansible, una macchina Windows e Linux.

Per potersi connettere al computer Windows è necessario configurare WinRM.

A partire da Windows 2012, WinRM è normalmente abilitato, l’unica cosa da fare è abilitare l’autenticazione CredSSP per i server membri del dominio utilizzando il comando seguente:

Enable-WSManCredSSP -Role Server

Per i computer che non sono membri di un dominio Active Directory, è necessario utilizzare l’autenticazione di base

winrm set winrm/config/client/auth '@{Basic="true"}'
winrm set winrm/config/service/auth '@{Basic="true"}'

Per essere il più vicino possibile all’uso aziendale, in questo tutorial ho utilizzato due server Windows che sono membri di un dominio Active Directory.

Inoltre, ti invito a leggere questa documentazione: Windows Remote Management — Ansible Documentation

Installazione di Ansible su Ubuntu

Esistono diversi modi per installare Ansible su Linux. Con Ubuntu, Ansible è disponibile tramite il gestore pacchetti, semplificandone l’installazione.

Dal terminale, inserisci il seguente comando per installare Ansible:

sudo apt install ansible

Conferma l’installazione del pacchetto

Una volta installato, inserisci il comando seguente per verificare che Ansible sia installato:

ansible --version
ansible version

Installazione di componenti aggiuntivi per gestire i server Windows

Per gestire i server Windows che fanno parte di un dominio Active Directory, è necessario installare componenti aggiuntivi in ​​modo da potersi connettere ai server utilizzando credssp.

Poiché Ansible utilizza Python, installeremo pip e quindi installeremo i componenti aggiuntivi Python.

sudo apt install python3-pip

Passeremo ora all’installazione di pywinrm[credssp], che ci permetterà di connetterci ai nostri server Windows.

Installa pywinrm[credssp]:

sudo pip install "pywinrm[credssp]"

SE hai anche l’errore ERRORE: pyopenssl 20.0.1 ha requisiti di crittografia>=3.2, ma avrai la crittografia 2.8 che è incompatibile, ecco come installare la versione corretta della crittografia.

Inserisci il comando seguente per aggiornare la crittografia:

sudo pip install -U cryptography

Installazione di SSHPASS

Per potersi connettere via SSH con una coppia nome utente/password è necessario installare SSHPASS.

sudo apt install sshpass

Una volta installato, apri il file /etc/ansible/ansible.cfg.

sudo nano /etc/ansible/ansible.cfg

Nella sezione [default], aggiungi:

host_key_checking = False

Ansible è installato, passeremo ora alla parte dell’inventario.

Inventario del server per Ansible

L’inventario in Ansible è qualcosa di piuttosto complesso, in questo tutorial ti spiegherò come iniziare con l’inventario in Ansible, ma ti invito a leggere la documentazione ufficiale per saperne di più : How to build your inventory — Ansible Documentation

Per impostazione predefinita, l’inventario in Ansible viene eseguito nel file /etc/ansible/hosts che è un file in formato ini e che contiene diversi gruppi in cui dichiariamo i server di destinazione.

Per impostazione predefinita, questo è l’aspetto del file:

Ti mostrerò diverse soluzioni per gestire il tuo inventario in Ansible.

Sono possibili altre soluzioni, spiegate nella documentazione.

Dichiarare i computer in Ansible

Inizieremo con il metodo più semplice, ovvero aggiungere un gruppo e gli indirizzi IP dei server in esso contenuti.

Ecco il blocco che aggiungeremo al file host ansible.

Apri il file con nano:

sudo nano /etc/ansible/hosts

Aggiungi il blocco di testo al file:

Salvare il file.

Abbiamo aggiunto all’inventario 2 computer Windows e un computer nel gruppo Ubuntu.

Per visualizzare l’inventario utilizzare il seguente comando:

ansible-inventory --list

Come puoi vedere, troviamo i computer che abbiamo dichiarato nel file host.

Questa soluzione non è super “user-friendly”, quando hai uno o due server inserire gli indirizzi IP va bene, ma quando hai diverse dozzine o centinaia di server, non è eccezionale.

Ora miglioreremo questo aspetto aggiungendo un alias per avere il nome del computer nell’inventario.

La dichiarazione viene effettuata in questa forma:

alias ansible_host=0.0.0.0

Il che ci dà per il nostro esempio:

È più leggibile così, no?

Modifica nuovamente il file /etc/ansible/hosts per modificare l’inventario:

SE elenchiamo nuovamente l’inventario utilizzando il comando ansible-inventory –list, arriviamo a un risultato più facile da usare.

ansible-inventory

E’ meglio così, no?

Abbiamo dichiarato il nostro inventario, ma dobbiamo ancora configurare diverse informazioni come la coppia nome utente/password e come connetterci ai computer.

Configura le variabili di inventario

Per impostazione predefinita, Ansible tenta di connettersi ai computer utilizzando il protocollo SSH, che è utile per il server Ubuntu, ma per il nostro gruppo Windows è necessario dire ad Ansible di utilizzare WinRM.

La gestione delle variabili può essere effettuata in diversi modi:

  • Nel file host
  • In un file dedicato al gruppo

Te li mostrerò entrambi.

Personalmente preferisco la seconda soluzione perché il file host diventa rapidamente illeggibile.

Configurazione delle variabili nel file host

La prima soluzione per configurare le variabili è direttamente nel file host aggiungendo le variabili in formato INI.

Il blocco variabile è definito in questo modo: [group:vars].

Se continuiamo con l’esempio iniziale che ci fornisce per il gruppo Windows e Ubuntu:

Come puoi vedere, nel gruppo variabile, indichiamo diverse informazioni per connetterci ai server.

Più gruppi hai nel tuo inventario, più complicato sarà seguire il file host.

Configurazione delle variabili in un file dedicato al gruppo

Il secondo metodo che ti mostrerò in questo tutorial ti permetterà di memorizzare le variabili in un file separato per ogni gruppo.

Questo file deve essere inserito nella cartella /etc/ansible/group_vars/ e deve essere nominato con il nome del gruppo (winodws.yml/ubuntu.yml).

Qui il formato non è INI ma YAML.

Se la cartella non esiste, creala:

sudo mkdir /etc/ansible/group_vars

Quindi crea il file con il nome del gruppo:

sudo touch /etc/ansible/group_vars/windows.yml

Modifica il file:

sudo nano/etc/ansible/group_vars/windows.yml

Ecco il contenuto del file windows.yml:

Per il file ubuntu.yml, ti lascerò farlo da solo.

Per facilitare la modifica, ti consiglio di utilizzare vscode o notepad++ che supporta il formato YML.

Troverai la soluzione qui: Ansible : inventory vars #3 ($158) · Extraits de code · Extraits de code · GitLab (rdr-it.com)

Configurare le variabili nella dichiarazione dell’host

Per completare questa parte sulla variabile è possibile indicarli direttamente nella dichiarazione dell’host.

Per completare questa parte sulla variabile è possibile indicarli direttamente nella dichiarazione dell’host.Per completare questa parte variabile potrai indicarlo direttamente dall’host.

LAB-APACHE2 ansible_host=192.168.14.79 ansible_connect=ssh ansible_ssh_user=ansible ansible_ssh_pass=$€cr€Tp@$s0rD ansible_python_interpreter='/usr/bin/env python3' ansible_become_method=sudo

Separa l’inventario in più file

È possibile avere più inventari in Ansible.

Per fare ciò, è necessario creare una cartella inventorys nella cartella /etc/ansible/, quindi in questa cartella creare un file host.

Per ogni chiamata al comando ansible o ansible-playbook, dovrai utilizzare il parametro -i per specificare l’inventario.

Maggiori informazioni qui: Sample Ansible setup — Ansible Documentation


Ora sai come creare il tuo inventario per Ansible, ora passeremo al test e verificheremo che tutto funzioni.

Testare la connessione tra Ansible e i computer di inventario

Prima di eseguire le azioni di configurazione utilizzando il playbook, testeremo la corretta configurazione di Ansible e la nostra configurazione utilizzando un “ping”.

Per testare le macchine Windows utilizzare il seguente comando:

ansible group -m win_ping

Il che dà per il nostro gruppo Windows:

ansible windows -m win_ping

Se tutto è installato e configurato correttamente, la risposta ping sarà pong.

Per Linux o altra connessione ssh, useremo ping:

ansible group -m ping

Il che dà per il gruppo Ubuntu:

ansible ubuntu -m ping

Come con i computer Windows, se tutto va bene, la risposta al ping è pong.


Hai effettuato la prima interazione tra Ansible e i tuoi server. Passeremo ora al playbook.

Playbook o libri di ricette

Potremo finalmente metterci al lavoro e ora vedrai tutta la potenza di Ansible.

Prima di iniziare ti spiegherò “velocemente” cos’è un playbook.

Un playbook è un elenco di azioni che eseguiremo sui computer, è un file in formato YAML in cui descriveremo ciò che vogliamo.

Vedrai con gli esempi, sarà più semplice capire 😉

Prima di lanciarci in un playbook, utilizzeremo anche Ansible Galaxy, che è un sito che offre moduli che forniranno funzionalità aggiuntive ad Ansible e ne avremo bisogno nei playbook che vi presenterò.

Playbook di Windows

Prima di iniziare a creare il nostro primo playbook, che ci consentirà di installare la funzionalità SNMP e configurare il servizio, dovremo installare moduli aggiuntivi.

Per iniziare installeremo due raccolte:

Inserisci i comandi seguenti:

ansible-galaxy collection install ansible.windows
ansible-galaxy collection install community.windows

Passeremo ora alla creazione e all’utilizzo del nostro primo playbook.

Installa e configura la funzionalità SNMP su Windows con Ansible

Per il nostro primo esempio installeremo la funzionalità SNMP e la configureremo creando una community e indicando anche l’indirizzo IP del server di monitoraggio che sarà autorizzato a interrogare il servizio SNMP.

Inizieremo creando il file che conterrà il nostro playbook, non è obbligatorio creare il file nella cartella /etc/ansible/.

Lo creerò nella cartella home del mio utente.

touch pb-windows-snmp.yml

Modifica il file:

nano pb-windows-snmp.yml

Copia il contenuto seguente nel playbook:

Non entrerò nei dettagli del playbook, poiché la sintassi YAML è abbastanza semplice da capire.

Cosa devi ricordare:

la riga seguente indica a quale gruppo si applica il playbook:

hosts: windows # host group to run the module on

Poi hai la sezione delle attività e di seguito possiamo vedere le diverse azioni che verranno eseguite:

  • Installazione della funzionalità del servizio SNMP
  • Configurazione del servizio SNMP indicando la community e l’indirizzo IP autorizzato.

Ora lanceremo il playbook:

ansible-playbook pb-windows-snmp.yml -v

Ecco il video dell’esecuzione:

Ora controlleremo su un server, nell’elenco dei servizi troviamo il servizio SNMP. :

E possiamo vedere nelle proprietà che la configurazione è stata applicata:

In meno di 50 secondi sono riuscito a installare e configurare il ruolo SNMP su 2 server.

SE riproduci il playbook, controllerà che il servizio sia installato e che la configurazione SNMP sia corretta, questo garantisce che anche tu abbia sempre la configurazione corretta.

Installa gli aggiornamenti di Windows con un playbook Ansible

Il secondo playbook che ti offro per Windows in questo tutorial è eseguire gli aggiornamenti di Windows.

Lo trovo particolarmente interessante per i server, perché permette di controllare l’esecuzione di Windows Update.

Ecco il playbook:

Esegui il playbook per aggiornare i server.

La modalità dettagliata fornisce feedback sugli aggiornamenti installati.

Playbook Linux – Ubuntu

Il funzionamento per Linux è identico, come per Windows, ecco un playbook che vi permetterà di aggiornare i server:

Esegui il playbook:

ansible-playbook playbook-ubuntu-update.yml -v

Per poter eseguire i comandi apt, è necessario configurare l’account utente per utilizzare sudo senza richiedere una password.


Ora sai come creare ed eseguire un playbook.

Conclusione

Questo tutorial termina qui e spero che ti abbia aiutato a comprendere Ansible, che ti permetterà di ottimizzare la gestione e la configurazione dei tuoi server.

Insieme a Jenkins o Rundeck per l’esecuzione dei playbook, avrai feedback sulla console da registrare e potrai seguire l’applicazione dei playbook.

Molti moduli aggiuntivi sono disponibili su Ansible Galaxy per consentirti di gestire tutti i tuoi server e apparecchiature (switch, router, firewall, ecc.).

Arriveranno altri tutorial su Ansible e in particolare sull’installazione e configurazione con interfaccia grafica (Ansible AWX / Ansible Semaphore).

Renderò disponibili anche diversi playbook sul mio Git:




Lascia un commento