Ansible - parte 3

Pubblicato il mar 21 maggio 2019 in tutorial • 2 min read

Continuando quanto detto nel precedente articolo analizziamo adesso alcune best practices e la struttura di progetti più complessi.

Struttura di un progetto ansible

Progetti con molteplici playbooks possono essere organizzati nei modi più disparati. Tuttavia, un modo migliore per organizzare i playbooks è quello di raggruppare talune funzionalità nei cosidetti roles o ruoli. Questo permette il riutilizzo delle funzionalità in diversi contesti ma anche la possibilità di condividere certi ruoli con altri utenti.

Una struttura delle directory potrebbe essere la seguente:

production.ini            # includes the hosts
webservers.yml            # playbook that makes use of one or more roles

roles/
    common/               # a role directory
        tasks/
            main.yml
        handlers/
            main.yml
        templates/
            mysite.conf.j2
        files/
            favicon.ico
            backup.sh
        vars/
            main.yml
        defaults/
            main.yml
        meta/
            main.yml
    monitoring/           # another role directory
    myapp/                # yet another role directory
    ...

Ciascun role può contenere una o più sottodirectories, per esempio:

  • tasks -- contiene una lista di tasks del ruolo.
  • handlers -- contiene gli handlers del ruolo (può essere usata anche al di fuori del relativo ruolo).
  • defaults -- contiene le variabili di default per il ruolo.
  • vars -- contiene altre variabili per il ruolo.
  • files -- contiene i files che verranno utilizzati dai task del ruolo.
  • templates -- contiene i templates da utilizzare.
  • meta -- definisce alcuni metadati per il ruolo come ad esempio le eventuali dipendenze.

A seconda del tipo di ruolo non tutte le directories sono richieste. Tuttavia, ciascuna directory che contribuisce alla logica dello script ansible deve contenere un file main.yml che verrà letto automaticamente.

L'opzione roles: può essere usata per aggiungere diversi ruoli ad un playbook. Per esempio:

---
- hosts: webservers
  roles:
     - common
     - myapp

L'uso dei ruoli permette di realizzare progetti piuttosto complessi. Ma questo esula dello scopo dei presenti articoli. Comunque si possono trovare tutte le informazionei relative ai roles nella documentazione ufficiale.