Cos'è e come funziona un Ansible Role?

Copia URL

Un Ansible® Role è un'unità di automazione Ansible autosufficiente e portabile che permette di raggruppare le attività (o task) correlate e le variabili, i file, gli handler e le altre risorse associate in una struttura di file nota. Mentre le attività di automazione si possono scrivere solamente in un Ansible Playbook, con gli Ansible Role è possibile creare bundle di contenuti di automazione ed eseguirli in uno o più play, riutilizzarli in più playbook oppure condividerli con altri utenti tramite le raccolte.

Gli Ansible Role sono scritti in sintassi YAML, un linguaggio per la serializzazione di dati leggibile in chiaro e utilizzato nella scrittura dei file di configurazione. Quando si inserisce un ruolo in un'attività o in un play, Ansible cerca un file main.yml in almeno una delle otto directory standard dei ruoli. Di seguito un elenco e una breve descrizione delle directory, che comprendono: tasks, handlers, modules, defaults, variables, files, templates e meta.

roles/ common/ # this hierarchy represents a "role" tasks/ # main.yml # -- tasks file can include smaller files if warranted handlers/ # main.yml # -- handlers file templates/ # -- files for use with the template resource ntp.conf.j2 # ------- templates end in .j2 files/ # bar.txt # -- files for use with the copy resource foo.sh # -- script files for use with the script resource vars/ # main.yml # -- variables associated with this role defaults/ # main.yml # -- default lower priority variables for this role meta/ # main.yml # -- role dependencies library/ # roles can also include custom modules module_utils/ # roles can also include custom module_utils lookup_plugins/ # or other types of plugins, like lookup in this case webtier/ # same kind of structure as "common" was above, done for the webtier role monitoring/ # "" fooapp/ # "" 

È possibile utilizzare un Ansible Role richiamandolo in un playbook. Si può inserire nell'elenco tramite l'opzione roles oppure aggiungere nella sezione delle attività del ruolo utilizzando i comandi include_role o import_role. I ruoli inseriti con l'opzione roles o aggiunti con import_role vengono eseguiti prima di tutte le altre attività del play, mentre i ruoli inseriti con include_role vengono eseguiti nell'ordine in cui sono definiti all'interno dell'elenco delle attività.

Gli Ansible Role e gli Ansible Playbook sono entrambi strumenti per l'organizzazione e l'esecuzione delle attività di automazione, ma svolgono funzioni diverse. Decidere di creare Ansible Role oppure di scrivere tutte le attività in un Ansible Playbook dipende dallo scenario di utilizzo e dal grado di familiarità con Ansible.

La maggior parte degli sviluppatori e degli amministratori di sistema comincia creando singoli playbook. Un playbook è un elenco di attività di automazione eseguite per un inventario definito. Le attività si possono organizzare in play, ovvero raccolte di una o più attività associate a un determinato host ed eseguite in ordine. A loro volta i play si possono raggruppare in playbook. In questo modo si ottiene un meccanismo flessibile per eseguire l'automazione Ansible in un unico file.

Per quanto i playbook siano strumenti efficaci per lo sviluppo di progetti di automazione con Ansible, scrivere tutte le attività in un playbook non è sempre l'approccio più indicato. In contesti in cui la portata e le variabili sono complesse e la riusabilità è importante, utilizzare gli Ansible Role per creare i contenuti di automazione e richiamarli all'interno di un playbook potrebbe essere la scelta più opportuna.

L'esempio riportato di seguito illustra l'utilizzo del ruolo linux-systemr-roles.timesync all'interno di un playbook. Sarebbero serviti quattro task per avere lo stesso risultato che qui si ottiene con un solo ruolo.

- name: Manage timesync with 3 servers hosts: targets vars: timesync_ntp_servers: - hostname: foo.example.com iburst: true - hostname: bar.example.com iburst: true - hostname: baz.example.com iburst: true roles: - linux-system-roles.timesync 

Creare Ansible Role invece di scrivere tutti i contenuti di automazione in un unico playbook offre numerosi vantaggi:

Riusabilità e condivisione

I ruoli sono unità di automazione riutilizzabili. Dato che i ruoli separano i raggruppamenti logici delle attività di automazione dal contesto del singolo play o playbook, è possibile riutilizzarli in più play o playbook, ma anche condividerli e impiegarli in altri progetti.

Modularità

L'utilizzo dei ruoli promuove l'adozione di un approccio modulare all'automazione in cui ciascun ruolo è responsabile di una funzionalità specifica. Questo approccio permette di analizzare, gestire e risolvere i problemi relativi al codice di automazione più agevolmente.

Organizzazione

Gli Ansible Role permettono di organizzare le attività, i modelli, i file e le variabili in maniera strutturata. Questa struttura, in cui tutti gli elementi relativi a uno specifico ruolo sono contenuti nella sua directory, aiuta a semplificare la gestione delle configurazioni di automazione complesse.

Parametrizzazione

I ruoli permettono di definire variabili predefinite che si possono sostituire quando il ruolo è utilizzato in un Ansible Playbook. Questo significa che è possibile adattare il comportamento del ruolo in base all'ambiente o allo scenario di utilizzo senza dover modificare il ruolo.

Versioning e gestione delle dipendenze

I ruoli prevedono il controllo delle versioni e danno la possibilità di specificare le dipendenze del ruolo in un file meta/main.yml all'interno del ruolo. In questo modo è possibile gestire le versioni e le dipendenze in maniera esplicita e migliorare così la stabilità e la coerenza tra i diversi ambienti.

Test

La struttura dei ruoli si presta all'applicazione delle metodologie di test. È possibile creare test per un ruolo specifico per verificare che funzioni correttamente prima di integrarlo nei playbook.

Semplicità

Nel caso di progetti più estesi o complessi, i ruoli contribuiscono a semplificare l'uso degli Ansible Playbook. Anziché avere un playbook molto ampio che include tutte le attività, gli handler e i modelli, è possibile scriverne uno più conciso e facile da leggere e comprendere. Così facendo diventa anche più semplice individuare i ruoli da riutilizzare in progetti futuri. Un vantaggio notevole che accelera la scrittura dei contenuti di automazione e semplifica i flussi di lavoro. 

Una guida introduttiva ad Ansible Automation Platform

È possibile realizzare un nuovo ruolo utilizzando il comando ansible-galaxy role init role_name, che crea una directory organizzata secondo una struttura standard. Una volta verificata la directory, si possono definire le attività, la variabili predefinite e gli altri componenti. Si può anche aggiungere la documentazione nel file README.md in meta/main.yml, ma si tratta di un passaggio facoltativo.

La creazione di un nuovo ruolo richiede un certo livello di dimestichezza nell'uso di Ansible e potrebbe risultare complicato per quei team che hanno da poco iniziato a sviluppare i contenuti di automazione. Per snellire la creazione dei contenuti di automazione, sia i principianti che gli sviluppatori più esperti possono usufruire di Red Hat® Ansible Lightspeed with IBM watsonx Code Assistant, un servizio di intelligenza artificiale generativa che offre suggerimenti per la stesura del codice in base alle procedure consigliate di Ansible. È sufficiente formulare un prompt in linguaggio naturale in cui si definisce il tipo di automazione desiderata e Ansible Lightspeed with watsonx Code Assistant genera un contenuto composto da una o più attività. Queste attività si possono poi inserire in un Ansible Role o un Ansible Playbook.

Riducendo il lavoro necessario per la creazione, la gestione e il perfezionamento del codice Ansible, Ansible Lightspeed with watsonx Code Assistant aiuta ad aumentare la produttività e ad accelerare i tempi per l'adozione dell'automazione. 

Gli Ansible Role sono facilmente condivisibili. In questo modo i team possono sfruttare ruoli testati e aggiornati in tutti i progetti di automazione. I ruoli si possono condividere nei seguenti repository:

  • Ansible Galaxy. È un repository libero per la condivisione dei ruoli e di altri contenuti Ansible con il resto della community Ansible. I ruoli si caricano su Ansible Galaxy tramite l'interfaccia a riga di comando (CLI) mentre le raccolte si possono condividere dall'interfaccia web. Ansible Galaxy è un sito gestito dalla community, per questo motivo i contenuti non sono controllati, certificati, né supportati da Red Hat.
  • Ansible Automation Hub. Incluso nella sottoscrizione Red Hat Ansible Automation Platform, Ansible Automation Hub è un repository centralizzato dove trovare, scaricare e condividere le Ansible Content Collections. Ansible Automation Hub è ospitato da Red Hat e raccoglie contenuti certificati e convalidati da Red Hat e dai suoi partner ISV.
  • Automation Hub privato. Si tratta di un repository privato on premise che permette alle organizzazioni di gestire, condividere e ottimizzare i contenuti internamente all'azienda. Con questo repository le aziende possono condividere i ruoli e gli altri contenuti di automazione in tutta l'azienda per semplificare i flussi di lavoro e accelerare l'automazione. 

Red Hat Ansible Automation Platform è una piattaforma unificata progettata per supportare le aziende nelle iniziative di innovazione e crescita grazie all'automazione. La sottoscrizione Red Hat comprende l'accesso alle Red Hat Certified Content Collection e ai contenuti Ansible convalidati, disponibili nell'Ansible Automation Hub.

La sottoscrizione include anche Red Hat Ansible Lightspeed with IBM watsonx Code Assistant, uno strumento che semplifica la stesura del codice, aiuta a migliorare le attività presenti negli Ansible Role e accelera la creazione dei contenuti. Perfettamente integrato in Visual Studio Code, Ansible Lightspeed offre un valido aiuto per gli sviluppatori indipendentemente dal loro grado di esperienza con l'automazione Ansible. Consente infatti di creare agevolmente Ansible Role e Ansible Playbook in linea con le procedure consigliate senza bisogno di passare da un ambiente di sviluppo all'altro.

Ansible Lightspeed prevede anche l'abbinamento delle fonti dei contenuti, consente cioè di controllare i dati per l'addestramento della fonte per la generazione dei suggerimenti e di migliorare il processo decisionale per la creazione dei ruoli. Inoltre, con modelli addestrati su migliaia di ruoli sviluppati dalla community Ansible e punti dati forniti da Red Hat, Ansible Lightspeed aiuta a creare e perfezionare il codice Ansible in maniera precisa e trasparente per soddisfare le esigenze aziendali e accelerare l'adozione dell'automazione.

Continua a leggere

Articolo

I concetti base di Ansible

Ansible consente di automatizzare i processi IT, come il provisioning e la gestione della configurazione. Questo articolo fornisce un'introduzione ai concetti base di Ansible.

Articolo

Cos'è la gestione dei processi aziendali?

La gestione dei processi di business (BPM, business process management) consiste nella creazione di modelli di business, nell'analisi e nell'ottimizzazione dei processi aziendali end to end per realizzare i tuoi obiettivi aziendali strategici.

Articolo

Perché scegliere Red Hat per l'automazione

Red Hat Ansible Automation Platform include tutti gli strumenti necessari per condividere le competenze di automazione tra i team e adottare l'automazione a livello aziendale.

Scopri di più sull'automazione

Prodotti

Collabora con il nostro team di consulenti strategici in grado di analizzare l'azienda nel suo insieme e valutare le sfide da affrontare, per aiutarti a superarle con soluzioni complete e convenienti.

Una piattaforma per implementare l'automazione in azienda, in qualsiasi fase del tuo percorso di trasformazione

Risorse

Ebook

L'azienda automatizzata connette persone e processi

Ebook

Automazione dei flussi di lavoro dell'infrastruttura

Continua a leggere

Formazione

Corso di formazione gratuito

Ansible Essentials: Simplicity in Automation Technical Overview

Corso di formazione gratuito

Red Hat Ansible Automation for SAP