Skip to main content

Capitolo 7 – Ruoli, Variabili e Gestione Segreti

Dopo aver imparato i playbook base, è fondamentale organizzare i progetti in modo modulare e sicuro.


7.1 Introduzione ai Ruoli

I ruoli permettono di raggruppare tasks, file, template e variabili in moduli riutilizzabili.

Struttura tipica di un ruolo nginx:

roles/
└── nginx/
    ├── tasks/
    │   └── main.yml
    ├── templates/
    │   └── nginx.conf.j2
    ├── files/
    ├── vars/
    │   └── main.yml
    ├── defaults/
    │   └── main.yml
    └── handlers/
        └── main.yml
  • tasks/main.yml → definisce le azioni principali
  • handlers/main.yml → definisce azioni come restart servizi
  • templates/ → file Jinja2 parametrizzati
  • vars/ → variabili specifiche di ruolo
  • defaults/ → variabili di default (può essere sovrascritte)

7.2 Creazione di un Ruolo

Esempio:

ansible-galaxy init nginx

Questo comando genera automaticamente la struttura del ruolo.


7.3 Utilizzo dei Ruoli in un Playbook

Esempio playbooks/web.yml:

- name: Configurazione Web Server
  hosts: web
  become: true
  roles:
    - nginx

Il ruolo viene eseguito con tutte le sue tasks, handlers, template e variabili.


7.4 Variabili

Le variabili possono essere definite in diversi livelli di precedenza:

  1. Variabili host specifiche (host_vars/host1.yml)
  2. Variabili di gruppo (group_vars/web.yml)
  3. Variabili definite nel ruolo (vars/main.yml)
  4. Variabili di default del ruolo (defaults/main.yml)
  5. Variabili inline nel playbook

Esempio group_vars/web.yml:

http_port: 80
max_clients: 200

7.5 Gestione Segreti con Ansible Vault

Ansible Vault permette di cifrare variabili sensibili come password o chiavi.

Creazione file criptato:

ansible-vault create group_vars/web/secrets.yml

Esempio contenuto:

db_password: "SuperSegreta123"

Esecuzione playbook con Vault:

ansible-playbook playbooks/web.yml --ask-vault-pass

Modifica file criptato:

ansible-vault edit group_vars/web/secrets.yml

7.6 Best Practice Ruoli e Variabili

  • Separare configurazioni per ruolo
  • Non hardcodare password nei playbook
  • Usare nomi di variabili chiari e coerenti
  • Riutilizzare ruoli comuni per diversi progetti
  • Versionare tutto il progetto con Git (escludendo segreti se necessario)

7.7 Conclusione

I ruoli, le variabili e la gestione dei segreti sono elementi fondamentali per strutturare progetti Ansible professionali.

Permettono:

  • Modularità
  • Scalabilità
  • Sicurezza
  • Manutenzione più semplice

Nei prossimi capitoli si può approfondire:

  • Template Jinja2
  • Deploy applicativi completi
  • Hardening e sicurezza avanzata
  • Logging e troubleshooting