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.