web analytics

[Guida] Ansible, come automatizzare un’infrastruttura GNU/Linux

ansible

Uno degli aspetti per me più interessanti della gestione sistemistica di macchine basate su GNU/Linux, è la possibilità di automatizzare alcune procedure, risparmiando una grande quantità di lavoro. La capacità di iterare una serie di istruzioni su più macchine, tuttavia, porta con sé una serie di complessità non di poco conto. Per fortuna esistono tool come Ansible. Si tratta di un sistema open source di automazione, che mira a semplificare la gestione della configurazione e della distribuzione delle applicazioni, provisioning del cloud, esecuzione di attività ad hoc, automazione della rete ed orchestrazione multi-nodo.

Ansible: i requisiti

Ansible è uno strumento di automazione agentless che va installato su un Control node. Dal nodo di controllo riesce a gestire le macchine e altri dispositivi, chiamati Managed node, sfruttando il protocollo SSH. Non è necessario, quindi, installare un database o eseguire alcun demone. Una volta installato il pacchetto di Ansible su una macchina, questa può gestire un’intera infrastruttura, l’Host inventory, da quell’unico nodo di controllo.

ansibile schema automazione
Di seguito vi elenco quelli che sono i requisiti che i vari computer devono rispettare, per permettere al sistema di funzionare correttamente:

  • Nodo di controllo:
    • Il nodo di controllo deve avere un sistema GNU/Linux;
    • Python 2.7/Python 3.8 (o superiore), correttamente installato.
  • Nodi gestiti:
    • Ansible effettua una connessione tramite SSH e trasferisce i moduli utilizzando SFTP. Se SSH funziona ma SFTP non è disponibile, è possibile impostare il protocollo SCP nel file di configurazione ansible.cfg;
    • Python 2.7/Python 3.8 (o superiore), correttamente installato;
    • Se presente SELinux, altro requisito sarà il pacchetto libselinux-python.

Installazione

A partire dalla versione 2.10, Ansible distribuisce due pacchetti: quello della comunità chiamato proprio ansible ed una versione minimale chiamata ansible-core. Il primo include il linguaggio, il runtime, ed una gamma di ulteriori componenti gestiti dalla community, che ne espandono le funzionalità. Potete scegliere una delle seguenti modalità per installare questo pacchetto:

  • Gestore di pacchetti della vostra distribuzione;
    #Fedora
    sudo dnf install ansible
    #Ubuntu
    sudo apt update
    sudo apt install software-properties-common
    sudo apt-add-repository --yes --update ppa:ansible/ansible
    sudo apt install ansible
    
  • Gestore pacchetti di python pip;
    sudo python get-pip.py
    sudo python -m pip install ansible

ansibile open source automation tool installation

Se utilizzate bash come emulatore di terminale potrebbe risultare comodo installare un tool aggiuntivo che permette l’auto completion delle utility di Ansible da command line. Installate il pacchetto tramite le seguenti istruzioni:

#Fedora
sudo dnf install python-argcomplete
#Ubuntu
sudo apt install python-argcomplete

Procedete, quindi, alla sua configurazione:

sudo activate-global-python-argcomplete

Ansible, configurazione iniziale

Ora che avete installato Ansible su un nodo di controllo, siete pronti per utilizzarlo. Una semplice routine si compone di tre passaggi chiave:

    • la selezione delle macchine dall’inventario,
    • la connessione SSH
    • l’invio vero e proprio dei comandi da eseguire in locale sui singoli nodi.

Interessante anche la possibilità di configurare dei playbook contenenti una o più istruzioni che definiscono, in un unico file, l’insieme di host da configurare, tra quelli appartenenti all’inventario, e l’elenco di attività da eseguire. Come vi ho anticipato, Ansible comunica con macchine remote tramite il protocollo SSH. Per impostazione predefinita, utilizza OpenSSH. Prima di procedere, quindi, controllate se vi è possibile connettervi utilizzando SSH a tutti i nodi che volete inserire nell’inventario, utilizzando lo stesso nome utente.
ansible open source invetory host config file

Sebbene sia possibile passare un comando ad un indirizzo IP, è necessario configurare un inventario se volete sfruttare pienamente la flessibilità e le potenziaità del tool di automazione. Create quindi il file /etc/ansible/hosts e aggiungete gli indirizzi IP dei sistemi remoti:

192.0.2.50
192.0.2.48
192.0.2.46

Una volta connessi, Ansible trasferisce i moduli richiesti alle macchine remote per l’esecuzione. Ad esempio, eseguite la seguente istruzione per inviarei un comando a tutte le macchine dell’inventario:

ansible all -a "/bin/echo hello world"

Chiaramente in questo articolo ho voluto fare un’introduzione a questo strumento che ha enormi potenzialità. Se siete interessati, potete scoprirle dando uno sguardo alla pagina ufficiale della guida, a cui potete accedere tramite questo link. Inoltre vi consiglio un buon libro a riguardo:

sharing-caring-1Seguiteci sul nostro canale Telegram, sulla nostra pagina Facebook e su Google News. Nel campo qui sotto è possibile commentare e creare spunti di discussione inerenti le tematiche trattate sul blog.