Ansible - parte 1
Pubblicato il dom 19 maggio 2019 in tutorial • 3 min read
Questo è il primo di una breve serie di posts in cui spiegherò cosa sia ansible. In questo primo post mi occuperò dell'installazione e del setup base.
Cosa è Ansible ?
Ansible è un semplice strumpento open-source per l'automazione che può essere usato per automatizzare la gestione della configurazione, il deploy di un'applicazione, l'orchestration in genere. Rispetto gli altri strumenti simili ansible non richiede che sia presente un client sugli hosts remoti. Infatti tutti i comandi saranno semplicemente eseguiti tramite SSH. La configurazione di ansible è basata su YAML, un formato file leggibile sia da essere umani che dai software. L'ampio set di moduli
presente nell'installazione base fornisce varie funzionalità predefinite.
Installazione
In questa serie di articoli utilizzerò i comandi tipici di Debian. Ma visto che ansible è presente nei repository delle maggiori distro Gnu/Linux è possibile usarlo con qualunque distribuzione.
Su Debian ansible è già presente nei repository ufficiali e quindi per installarlo basta eseguire:
~ $ sudo apt-get install ansible
Inventory File
L'inventory file o file d'inventario specifica su quali hosts remoti gli script ansible verranno fatti girare.
Gli hosts possono essere definiti nel file di configurazione globale /etc/ansible/hosts
oppure specificati separatamente nel file inventory.ini
che verrà passato, come parametro opzionale, al momento dell'esecuzione dello script ansible.
Nella maggior parte dei casi è meglio usare questa seconda modalità. Questo permette di creare file inventory.ini
specifici per progetti diversi.
Gli hosts possono essere ragguppati per nome indicando il nome del gruppo tra parentesi quadre.
Ad esempio:
mail.example.com
[webservers]
foo.example.com
bar.example.com
[dbservers]
one.example.com
two.example.com
Comandi Ad-hoc
Il modo più semplice di usare ansible è quello di utilizzare i comandi ad-hoc. Questo tipo di comandi sono, spesso, usati per eseguire comandi estemporanei. Se volessi riavviare tutti gli hosts che fanno parte del gruppo [webservers]
potrei usare questo comando:
~ $ ansible webservers -i inventory.ini -a "/sbin/reboot"
Ci sono molti paramatri opzionali che possono essere utilizzati; uno di questi è -K
che permette di eseguire il comando come root sul pc remoto. Ma tutto questo, per quanto comodo, non è tanto diverso da ciò che si potrebbe fare con dei semplici script bash ad esempio.
La vera potenza di ansible risiede nei così detti playbooks
.
Playbooks
I playbooks
sono un modo più sofisticato di usare ansible: permettono di indicare una complessa serie di singole operazioni, dette tasks
, tramite files di configurazione.
Tasks
Un playbook può contenere molti tasks. Ogni task è basato su uno dei moduli built-in di ansible o su semplici comandi specificati dall'utente. Per esempio il task per l'installazione del webserver apache2
potrebbe essere il seguente:
- name: This is a task
apt: pkg=apache2 state=present
Analizziamone la sintassi. Il name
è opzionale ma raccomandato visto che serve per avere un'utile notifica durante l'esecuzione del task stesso. Il modulo scelto per eseguire questo task è apt
, dal momento che l'host target è una macchina basata su apt (Debian/Ubuntu like). A questo modulo corrispondono gli argomenti pkg
e state
che indicano rispettivamente il nome del pacchetto da installare e lo stato in cui si desidera che l'host si trovi, relativamente al pacchetto, una volta terminato il task.
In ansible sono presenti di default diversi moduli che possono essere usati per eseguire tasks differenti.
Sintassi del playbook
I playbooks sono, in pratica, dei file di configurazione in linguaggio YAML. Essi contengono gli hosts in cui i tasks verranno eseguiti, diverse altre impostazioni e ovviamente la lista dei tasks che devono essere eseguiti sugli hosts remoti.
Un semplice playbook (install_apache2.yaml
) potrebbe essere questo:
---
- hosts: webservers
become: true
tasks:
- name: Update apt-cache
apt: update_cache=yes
- name: Install Apache2
apt: name=apache2 state=present
Questo playbook provvederà ad aggiornare i repository apt di tutti gli hosts del gruppo webservers
e ad installare apache2. la key become
indica che sono richiesti i permessi di root sugli hosts remoti per completare i tasks del playbook.
Il playbook può essere eseguito tramite il comando ansible-playbook
:
~ $ ansible-playbook -i inventory.ini install_apache2.yaml -K
Il parametro -K
, come detto in precedenza, fa si ché venga richiesta la password di root necessaria. Nel caso in cui nel file inventory.ini
sono presenti diversi gruppi di host si può usare il parametro -l
per limitare l'esecuzione dei task del playbook ad un gruppo specifico.
Ad esempio, -l "webservers"
.
Continua su Ansible - parte 2.