Automatizzare con Ansible
Scopri come rendere i tuoi processi IT più rapidi e semplici con uno dei migliori motori di automazione open source: Ansible.

Ansible: uno strumento efficace e versatile
Alzi la mano chi non ha mai riscontrato questo problema: hai configurato un ambiente su un server da qualche parte e, lungo il percorso, hai effettuato innumerevoli ricerche sul web per risolvere una miriade di piccoli problemi. Quando hai finito, hai già dimenticato la maggior parte dei problemi che hai incontrato e cosa hai fatto per risolverli. In sei mesi, dovrai configurare di nuovo tutto su un altro server, ripetendo ogni passo scrupoloso e imparando di nuovo tutto mentre procedi.
In genere gli amministratori di sistema scrivono script bash per gestire queste cose. Gli script sono spesso fragili, funzionano solo sull’ambiente giusto e quando l’infrastruttura si ingrandisce è un compito arduo avere tutti i sistemi allineati e queste operazioni sono spesso manuali e soggette a errori.
Ansible risolve questo problema. È uno strumento di automazione IT che ti consente di descrivere come vuoi che sia il tuo ambiente utilizzando file con un linguaggio semplice. Lo strumento utilizza quindi questi file per capire cosa fare e dove. I file, noti come playbook, supportano costrutti di programmazione come loop e condizionali, offrendoti un ampio controllo su ciò che accade al tuo ambiente. Puoi riutilizzare questi playbook nel tempo, creando una libreria di diversi scenari.
Ansible è un prodotto Red Hat e, sebbene siano disponibili versioni a pagamento con supporto e servizi aggiuntivi, è possibile installare questo progetto open source gratuitamente. Può amministrare macchine Linux e Windows senza installare nulla su di esse, rendendolo più semplice da usare su larga scala. A tale scopo, utilizza certificati SSH o l'esecuzione remota di PowerShell su Windows.
I punti di forza di Ansible sono:
- È scritto in Python, ciò lo rende multipiattaforma, performante e leggero;
- Le istruzioni e la configurazione vengono scritte in YAML, quindi non richiede conoscenza di linguaggi di programmazione;
- Non richiede l’installazione di un agent sulle macchine da gestire, basta un accesso ssh e la presenza di Python.
Componenti
Analizziamo alcuni dei termini utilizzati dal software, così da comprendere meglio le sue componenti:
- Inventario: è la lista delle macchine sulle quali Ansible può operare. Per rendere questa lista più leggibile è possibile creare dei gruppi di host. Per creare questa lista basta aggiungere al file /etc/ansible/hosts un alias e l’ip delle nostre macchine, semplicemente scrivendo in YAML;
- Moduli: i moduli sono i comandi che eseguiamo sulle macchine. Esistono moduli per ogni tipo di operazione che vogliamo eseguire, ad esempio l’installazione e la rimozione di pacchetti, deployment di file (o generazione del loro contenuto), gestione dei servizi e tanto altro. Per esempio: vogliamo installare un pacchetto tipo vim? Possiamo usare il modulo apt, vogliamo aggiungere un cronjob? C’è il modulo cron. Dal sito ufficiale è possibile scaricare una grande quantità di moduli, ma se non troviamo ciò che ci serve è possibile creare un proprio modulo custom;
- Task: il task è l’unità più piccola che esiste in Ansible ed è l’operazione che dobbiamo eseguire. I comandi verranno eseguiti richiamando il modulo apposito con vari parametri;
- Playbook: il playbook è l’unità più grande, sono una lista di task e delle relative variabili legati a particolari gruppi di macchine in inventario. Sono dei manuali che Ansible leggere ed andrà ad eseguire passo passo.
- Ruoli: i ruoli sono dei componenti dei playbook che raggruppano operazioni legate tra di loro con uno scopo specifico. Queste vengono di solito unificate per avere più riusabilità delle stesse. Se il ruolo definito è processo standard, è facile che qualcuno lo abbia già implementato e lo si può scaricare da Ansible Galaxy!
Installazione
Come esempio proviamo ad installare Ansible su una macchina CentOS (va bene qualsiasi altra distribuzione) e lanciare qualche semplice comando.
Il nostro ambiente sarà formato da una macchina server con Ansible installato e due client (host1 e host2) in cui non dobbiamo installare nulla.
La prima cosa da fare è aggiungere il repository elep, perchè Ansible non si trova nelle repository ufficiali di CentOS.
sudo yum install epel-release
Ora installiamo Ansible solo nella macchina server, nei client non serve nessun agent quindi non dobbiamo installare nulla.
sudo yum install ansible
Configurazione
Il terzo passaggio è configurare il file degli hosts in /etc/ansible/hosts
Identifichiamo i gruppi dei nostri hosts, nell’esempio abbiamo creato un solo gruppo chiamato 'webservers'.
[webservers] host1 ansible_ssh_host=192.168.1.10 host2 ansible_ssh_host=192.168.1.11
Per la connessione SSH è possibile creare una chiave SSH con i comandi ssh-keygen e ssh-copy-id, oppure nel file hosts di Ansible andare ad inserire direttamente le credenziali con ansible_user e ansible_pass.
Primi comandi
Siamo già pronti per effettuare il primo test! Proviamo a lanciare un ping su tutte le macchine che abbiamo configurato nel file hosts.
ansible -m ping webserver
Con questo verrà lanciato il comando ping utilizzando l'omonimo modulo, su tutti gli host del gruppo 'webservers'.
Se tutto è andato a buon fine, possiamo procedere e creare il nostro primo playbook che avrà il compito di copiare un file su tutti i server.
Creiamo la partella playbook che conterrà tutti i nostri file yaml
mkdir /etc/ansible/playbook
Creiamo il nostro primo playbook
vi /etc/ansible/playbook/test.yaml
- hosts: servers1 tasks: - copy: src: /root/test_server.txt dest: /etc/test_client.txt owner: root group: root mode: 0644
Creiamo il file di esempio
vi /root/test_server.txt
Ora possiamo lanciare il playbook
ansible-playbook /etc/ansible/playbook/test.yaml
Il file test_server.txt, verrà copiato nella cartella /etc/test_client.txt, in tutti gli hosts configurati gli verrà assegnato il proprietario root:root e i permessi 0644.
Conclusioni
Anche l'infrastruttura dei server deve essere controllata, testata e automatizzata come facciamo con le applicazioni. Al giorno d'oggi, la gestione della configurazioni non è una novità; gli strumenti per gestire le configurazioni esistono ormai da un po' di tempo. Puppet, Chef, ecc. Sono alcuni dei nomi che ci vengono in mente.
Ansible è in qualche modo simile a questi strumenti ma lo fa con più semplicità, senza un agent sui client e con i file di configurazione scritti in YAML.
Inoltre grazie ad Ansible Galaxy, troviamo pronti molti dei ruoli più comuni, risparmiandoci molto lavoro.
Scopri come automatizzare i tuoi processi IT con gli strumenti più all'avanguardia.
Vuoi saperne di più sulle applicazioni di Ansible al tuo business? I nostri sviluppatori sono a tua disposizione. Insieme possiamo aiutarti a rendere i tuoi progetti più rapidi ed efficaci!