Ai/automazione

Ansible: Automazione IT Semplice e Potente — Guida Definitiva (2026)

Ansible: Automazione IT Semplice e Potente — Guida Definitiva (2026)

Ansible è uno strumento di automazione IT open source incredibilmente potente e versatile. Permette di gestire configurazioni, distribuire software e orchestrare task complessi su un’ampia infrastruttura, il tutto in modo dichiarativo e senza la necessità di installare agenti sui sistemi gestiti. Immagina di dover aggiornare la configurazione di 100 server: con Ansible, puoi farlo con un singolo comando. In questo tutorial, esploreremo cos’è Ansible, i suoi casi d’uso più comuni, come installarlo e configurarlo, e come creare i tuoi primi playbook per automatizzare le tue attività IT. Che tu sia un sistemista, un DevOps engineer o uno sviluppatore, Ansible può semplificare notevolmente il tuo lavoro.

In questo tutorial imparerai a:

  • Installare e configurare Ansible.
  • Comprendere i concetti chiave di Ansible: inventario, playbook, task, module.
  • Scrivere playbook per automatizzare task comuni come l’installazione di software e la gestione di file.
  • Utilizzare variabili e template per rendere i playbook più flessibili e riutilizzabili.
  • Gestire l’esecuzione dei playbook e risolvere problemi comuni.

Prima di iniziare, assicurati di avere a disposizione un ambiente Linux (ad esempio, Ubuntu, Debian, CentOS) dove installare Ansible e almeno una macchina virtuale o server remoto su cui eseguire i tuoi playbook.

Prerequisiti

  • Un sistema Linux (Ubuntu, Debian, CentOS, ecc.) con accesso root o privilegi sudo.
  • Python 3.6 o superiore installato sul sistema di controllo (dove installerai Ansible).
  • Accesso SSH ai server remoti che desideri gestire con Ansible.
  • Conoscenza base di SSH e della shell di comando Linux.
  • Una macchina virtuale o server remoto su cui testare i playbook.

Installazione di Ansible

Ansible può essere installato su diverse distribuzioni Linux utilizzando i package manager nativi. Vediamo come installarlo su Ubuntu/Debian e CentOS/RHEL.

Installazione su Ubuntu/Debian

Aggiorna l’indice dei pacchetti e installa Ansible utilizzando apt:

sudo apt update
sudo apt install ansible -y

Verifica l’installazione controllando la versione di Ansible:

ansible --version

Dovresti vedere un output simile a questo (la versione potrebbe variare):

ansible [core 2.14.5]
  config file = None
  configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  ansible collection location = /home/user/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.10.6 (main, May 29 2023, 11:10:38) [GCC 11.3.0]
  jinja2 version = 3.0.3
  libyaml = True

Installazione su CentOS/RHEL

Abilita il repository EPEL (Extra Packages for Enterprise Linux) e installa Ansible utilizzando yum:

sudo yum install epel-release -y
sudo yum install ansible -y

Verifica l’installazione controllando la versione di Ansible:

ansible --version

Anche in questo caso, dovresti vedere un output simile a quello precedente.

Configurazione dell’Inventario

L’inventario di Ansible è un file che contiene la lista dei server che Ansible deve gestire. Per impostazione predefinita, Ansible cerca il file di inventario in /etc/ansible/hosts. Apri questo file con un editor di testo (ad esempio, nano o vim) e aggiungi i tuoi server:

sudo nano /etc/ansible/hosts

Aggiungi i server al file di inventario. Puoi specificare gli indirizzi IP o i nomi di dominio dei server. Puoi anche raggruppare i server in gruppi per semplificare la gestione. Ad esempio:

[webservers]
webserver1 ansible_host=192.168.1.10
webserver2 ansible_host=192.168.1.11

[databases]
database1 ansible_host=192.168.1.20

In questo esempio, abbiamo creato due gruppi: webservers e databases. Ogni server è definito con il suo nome (ad esempio, webserver1) e il suo indirizzo IP (ansible_host=192.168.1.10).

Configurazione dell’accesso SSH

Ansible utilizza SSH per connettersi ai server remoti. Per evitare di dover inserire la password ogni volta, è consigliabile configurare l’autenticazione tramite chiave SSH. Genera una coppia di chiavi SSH sul tuo sistema di controllo:

ssh-keygen -t rsa

Copia la chiave pubblica SSH sui server remoti:

ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]

Sostituisci user con il nome utente che utilizzi per connetterti ai server remoti e 192.168.1.10, 192.168.1.11, 192.168.1.20 con gli indirizzi IP dei tuoi server.

Creazione del Primo Playbook

Un playbook Ansible è un file YAML che definisce una serie di task da eseguire sui server remoti. Crea un file chiamato install_nginx.yml con il seguente contenuto:

---
- hosts: webservers
  become: true
  tasks:
    - name: Aggiorna la cache dei pacchetti
      apt: 
        update_cache: yes
      when: ansible_os_family == "Debian"

    - name: Installa Nginx
      apt:
        name: nginx
        state: present
      when: ansible_os_family == "Debian"

    - name: Aggiorna la cache dei pacchetti (CentOS)
      yum:
        update_cache: yes
      when: ansible_os_family == "RedHat"

    - name: Installa Nginx (CentOS)
      yum:
        name: nginx
        state: present
      when: ansible_os_family == "RedHat"

    - name: Avvia Nginx
      service:
        name: nginx
        state: started
        enabled: yes

Questo playbook esegue i seguenti task:

  • Aggiorna la cache dei pacchetti.
  • Installa il pacchetto nginx.
  • Avvia il servizio nginx e lo abilita all’avvio.

Il parametro hosts: webservers indica che questo playbook deve essere eseguito sui server appartenenti al gruppo webservers definito nel file di inventario. become: true indica che i task devono essere eseguiti con privilegi di root (utilizzando sudo). I blocchi when: permettono di eseguire task diversi a seconda del sistema operativo.

Esecuzione del Playbook

Per eseguire il playbook, utilizza il comando ansible-playbook:

ansible-playbook install_nginx.yml

Ansible si connetterà ai server definiti nel file di inventario e eseguirà i task definiti nel playbook. Durante l’esecuzione, Ansible mostrerà l’output di ogni task. Se tutto va bene, dovresti vedere un output simile a questo:

PLAY [webservers] *************************************************************************************************************************************************************************************************************************

TASK [Aggiorna la cache dei pacchetti] **************************************************************************************************************************************************************************************************
skipping: [webserver1] => changed=false 

TASK [Installa Nginx] ********************************************************************************************************************************************************************************************************************
ok: [webserver1]

TASK [Avvia Nginx] **********************************************************************************************************************************************************************************************************************
ok: [webserver1]

PLAY RECAP *******************************************************************************************************************************************************************************************************************************
webserver1                 : ok=3    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

Se vedi ok per ogni task, significa che il task è stato eseguito correttamente. Se vedi changed, significa che Ansible ha apportato delle modifiche al server. Se vedi failed, significa che il task ha fallito. In tal caso, controlla l’output del task per capire cosa è andato storto.

Verifica dell’installazione

Dopo aver eseguito il playbook, puoi verificare che Nginx sia stato installato correttamente accedendo al server web tramite il tuo browser. Apri il tuo browser e vai all’indirizzo IP del tuo server web (ad esempio, http://192.168.1.10). Dovresti vedere la pagina di benvenuto di Nginx.

Utilizzo di Variabili e Template

Le variabili e i template sono strumenti potenti che consentono di rendere i playbook più flessibili e riutilizzabili. Le variabili consentono di memorizzare valori che possono essere utilizzati in diversi task. I template consentono di creare file di configurazione dinamici basati su variabili.

Definizione di Variabili

Le variabili possono essere definite in diversi modi: nel file di inventario, nel playbook stesso o in file separati. Vediamo come definire una variabile nel playbook:

---
- hosts: webservers
  become: true
  vars:
    nginx_port: 8080
  tasks:
    - name: Aggiorna la cache dei pacchetti
      apt: 
        update_cache: yes
      when: ansible_os_family == "Debian"

    - name: Installa Nginx
      apt:
        name: nginx
        state: present
      when: ansible_os_family == "Debian"

    - name: Avvia Nginx
      service:
        name: nginx
        state: started
        enabled: yes

In questo esempio, abbiamo definito una variabile chiamata nginx_port con il valore 8080. Questa variabile può essere utilizzata in altri task del playbook.

Utilizzo di Template

I template utilizzano il motore di template Jinja2 per generare file di configurazione dinamici. Crea un file chiamato nginx.conf.j2 con il seguente contenuto:

server {
    listen {{ nginx_port }};
    server_name localhost;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

Questo template definisce un server Nginx che ascolta sulla porta definita dalla variabile nginx_port. Per utilizzare questo template, aggiungi un task al playbook:

    - name: Copia il file di configurazione di Nginx
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/sites-available/default
      notify: Riavvia Nginx

  handlers:
    - name: Riavvia Nginx
      service:
        name: nginx
        state: restarted

Questo task copia il file nginx.conf.j2 sul server remoto e lo salva come /etc/nginx/sites-available/default. Il parametro notify: Riavvia Nginx indica che il task Riavvia Nginx deve essere eseguito solo se il file di configurazione è stato modificato. Il blocco handlers definisce il task Riavvia Nginx, che riavvia il servizio Nginx.

Errori comuni e risoluzione

  • Errore di connessione SSH: Verifica che l’accesso SSH sia configurato correttamente e che tu possa connetterti ai server remoti utilizzando SSH. Controlla il file di inventario e assicurati che gli indirizzi IP e i nomi utente siano corretti. Se hai configurato l’autenticazione tramite chiave SSH, verifica che la chiave pubblica sia stata copiata correttamente sui server remoti.
  • Errore di sintassi nel playbook: Ansible è molto rigoroso sulla sintassi dei playbook YAML. Verifica attentamente la sintassi del tuo playbook e assicurati che sia valido. Puoi utilizzare un validatore YAML online per controllare la sintassi del tuo playbook.
  • Task che falliscono: Controlla l’output del task che ha fallito per capire cosa è andato storto. Spesso, l’errore è dovuto a un pacchetto non trovato, a un file non esistente o a un problema di permessi. Assicurati che tutti i prerequisiti siano soddisfatti e che tu abbia i permessi necessari per eseguire il task.

Conclusione

In questo tutorial, hai imparato le basi di Ansible e come utilizzarlo per automatizzare le tue attività IT. Hai imparato come installare e configurare Ansible, come creare un file di inventario, come scrivere playbook e come utilizzare variabili e template. Ansible è uno strumento potente e versatile che può semplificare notevolmente il tuo lavoro di sistemista, DevOps engineer o sviluppatore. Ricorda, la pratica rende perfetti! Più utilizzi Ansible, più diventerai bravo a automatizzare le tue attività IT.

I punti chiave da ricordare sono:

  • Ansible è un motore di automazione senza agent, basato su SSH.
  • I playbook sono scritti in YAML e definiscono lo stato desiderato del sistema.
  • L’inventario definisce i sistemi da gestire.
  • Variabili e template rendono i playbook riutilizzabili.

Ora hai le basi per iniziare a esplorare le numerose funzionalità di Ansible. Sperimenta, crea i tuoi playbook e automatizza le tue attività IT! Hai domande o vuoi condividere la tua esperienza con Ansible? Lascia un commento qui sotto!

Condividi questo articolo:

Scritto da

Rosario Giordano

Rosario Giordano è System Administrator e consulente IT specializzato in cybersecurity e cloud, con oltre 20 anni di esperienza nella gestione di infrastrutture Linux enterprise. Le sue aree di competenza includono hardening di SSH, piattaforme Kubernetes, database PostgreSQL, ambient i virtualizzati VMware e Proxmox, nonché la conformità ai framework di sicurezza NIS2 e ISO 27001.