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.
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
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.
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:
Seguiteci 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.