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

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!