Panoramica
YAML è un linguaggio leggibile in chiaro per la serializzazione di dati che viene spesso impiegato per la scrittura dei file di configurazione. Per alcuni, l'acronimo YAML sta per "yet another markup language", ovvero "un ulteriore linguaggio di markup", mentre per altri indica "YAML ain’t markup language", ovvero "YAML non è un linguaggio di markup" (un acronimo ricorsivo) a voler enfatizzare che YAML è progettato per i dati e non per i documenti.
YAML è un linguaggio di programmazione ampiamente diffuso poiché progettato per essere di facile lettura e comprensione. Inoltre, si può combinare con altri linguaggi di programmazione. La flessibilità e la accessibilità di YAML sono i motivi per cui Ansible® utilizza questo linguaggio per creare processi di automazione attraverso Ansible Playbook.
Sintassi YAML
I file YAML presentano un'estensione .yml o .yaml e rispettano regole di sintassi specifiche.
YAML unisce funzionalità tratte da Perl, C, XML, HTML e altri linguaggi di programmazione. Inoltre, è un sovrainsieme di JSON, pertanto i file JSON sono validi in YAML.
Non si usano simboli di formattazione classici come parentesi graffe o quadre, tag di chiusura o virgolette e i file YAML sono più semplici da leggere poiché si avvalgono del rientro in stile Python per determinare la struttura e indicare la nidificazione. Per salvaguardare la portabilità tra i sistemi, i caratteri di tabulazione non sono consentiti per definizione e al loro posto si utilizzano gli spazi bianchi, ossia dei caratteri di spaziatura letterali.
I commenti sono indicati con il simbolo del cancelletto (#). È sempre consigliabile utilizzare i commenti, in quanto descrivono lo scopo del codice. YAML non supporta i commenti multiriga, pertanto ogni riga deve presentare il carattere cancelletto come suffisso.
Una domanda comune tra le persone che si approcciano al linguaggio YAML riguarda il significato dei tre trattini. I tre trattini (---) stanno a indicare l'inizio di un documento, mentre la fine viene contrassegnata con tre punti (...).
Questo è un esempio molto elementare di file YAML:
#Comment: This is a supermarket list using YAML #Note that - character represents the list --- food: - vegetables: tomatoes #first list item - fruits: #second list item citrics: oranges tropical: bananas nuts: peanuts sweets: raisins
La struttura di un file YAML è costituita da una mappatura o da una lista e segue una gerarchia basata sul rientro e sulla modalità di definizione dei valori chiave. Le mappature consentono di associare coppie chiave-valore. Ogni chiave deve essere univoca e l'ordine non ha importanza. Non dissimile da quanto avviene con un dizionario Python o con l'assegnazione di variabile in uno script Bash.
È necessario risolvere una mappatura in YAML prima di poterla chiudere e di poterne creare una nuova. È possibile creare una nuova mappatura aumentando il livello di rientro o risolvendo la mappatura precedente e avviandone un'altra adiacente.
Una lista invece prevede che i valori seguano un determinato ordine e non ci sono vincoli al numero di elementi che si possono aggiungere. Le sequenze cominciano con un trattino (-) e uno spazio, mentre il rientro serve a separare un livello da quello superiore. Il funzionamento è lo stesso della sequenza in una lista Python o della matrice in Bash e Perl. È possibile incorporare una lista in una mappatura.
Nell'esempio riportato in precedenza "verdure" e "frutta" sono elementi appartenenti alla lista denominata "alimenti".
YAML contiene anche gli scalari, cioè dati arbitrari codificati in Unicode che si possono utilizzare come valori, ad esempio stringhe, numeri interi, date, numeri o variabili booleane.
Quando si crea un file YAML, bisogna assicurarsi di rispettare le regole di sintassi appena elencate e controllare che il file sia valido. A tal fine, è possibile utilizzare un linter, ossia un'applicazione creata appositamente per esaminare la sintassi dei file, e il comando yamllint per verificare la validità del file YAML prima di passarlo a un'applicazione.
Esempio di sintassi YAML
Di seguito un esempio di un file YAML molto semplice per il dossier di uno studente, con cui è possibile vedere in pratica le caratteristiche della sintassi:
#Comment: Student record #Describes some characteristics and preferences --- name: Martin D'vloper #key-value age: 26 hobbies: - painting #first list item - playing_music #second list item - cooking #third list item programming_languages: java: Intermediate python: Advanced javascript: Beginner favorite_food: - vegetables: tomatoes - fruits: citrics: oranges tropical: bananas nuts: peanuts sweets: raisins
Traducendo questo file in Python, utilizzando la libreria PyYAML, si ottiene la seguente struttura dei dati:
[ { "name": "Martin D'vloper", "age": 26, "hobbies": ["painting", "playing_music", "cooking"], "programming_languages": { "java": "Intermediate", "python": "Advanced", "javascript": "Beginner", }, "favorite_food": [ {"vegetables": "tomatoes"}, { "fruits": { "citrics": "oranges", "tropical": "bananas", "nuts": "peanuts", "sweets": "raisins", } }, ], } ]
Per cosa si usa YAML?
Uno degli impieghi più comuni di YAML è la scrittura dei file di configurazione. È consigliabile preferire YAML a JSON per la creazione dei file di configurazione perché, anche se nella maggior parte dei casi i due formati sono interscambiabili, YAML è più leggibile e intuitivo.
Oltre all'impiego che ne fa Ansible, YAML è utilizzato anche per i deployment e le risorse Kubernetes.
Da non sottovalutare anche il fatto che i file YAML si possono aggiungere al controllo del codice sorgente, come Github, ed è quindi possibile monitorare e controllare le modifiche.
Qual è la differenza fra Ansible e Red Hat® Ansible Automation Platform?
YAML in Ansible
Gli Ansible Playbook sono strumenti che consentono di orchestrare i processi IT. Un playbook è un file YAML contenente 1 o più play, che permette di definire la condizione target di un sistema.
Ciascun play può eseguire una o più attività e ogni attività richiama un modulo Ansible. I moduli consentono di eseguire le attività di automazione in Ansible. I moduli Ansible possono essere scritti in qualunque linguaggio che restituisca file JSON, come Ruby, Python o bash.
Un Ansible Playbook è composto da mappature ed elenchi. Per creare un playbook, avvia un elenco YAML che denomina il play, quindi elenca le attività in sequenza. Ricorda però che il rientro non indica l'eredità logica. Immagina ogni riga come un tipo di dato YAML (una lista o una mappatura).
Poiché Ansible utilizza modelli YAML leggibili in chiaro, i suoi utenti possono programmare l'esecuzione automatica delle attività ripetitive anche senza conoscere alcun linguaggio di programmazione avanzato. Gli sviluppatori possono inoltre utilizzare il comando ansible-lint (un linter YAML per Ansible Playbook), al fine di identificare errori ed evitare che si verifichino durante le fasi critiche di un'operazione.
Il rilascio di Ansible Lightspeed with IBM Watson Code Assistant, un servizio di intelligenza artificiale generativa, permette agli sviluppatori di creare contenuti Ansible per l’automazione in modo più efficiente. Inserendo una richiesta di attività in inglese, gli utenti potranno generare codice YAML pulito e coerente per l’automazione di attività da utilizzare per creare Ansible Playbook.
YAML per Kubernetes
Il funzionamento di Kubernetes si basa sullo stato definito e lo stato effettivo. Gli oggetti Kubernetes rappresentano lo stato di un cluster e indicano a Kubernetes lo stato desiderato del carico di lavoro. Gli utenti possono impiegare i file YAML per creare le risorse di Kubernetes, come pod, oggetti e deployment.
Durante la fase di creazione di un oggetto Kubernetes, è necessario aggiungere le specifiche sulla condizione target di quell'oggetto. Per creare l'oggetto su può usare l'API Kubernetes. La richiesta all'API include le specifiche dell'oggetto in formato JSON, anche se molto spesso gli utenti preferiscono fornire le informazioni richieste a kubectl sotto forma di file YAML. Kubectl si occuperà di convertire il file in YAML al posto dell'utente quando effettuerà la richiesta API.
Dopo aver creato e definito un oggetto, Kubernetes si assicura che tale oggetto continui ad esistere.
Gli sviluppatori e gli amministratori di sistema specificano lo stato definito utilizzando il file in formato YAML o JSON inviato all'API Kubernetes. Kubernetes utilizza un controller per analizzare la differenza fra il nuovo stato definito e lo stato effettivo nel cluster.
Perché scegliere Red Hat?
Red Hat Ansible Automation Platform utilizza il linguaggio di automazione YAML leggibile in chiaro che consente agli utenti di un'organizzazione di condividere, controllare e gestire il contenuto dell'automazione. Include tutti gli strumenti necessari per distribuire l'automazione nell'intera azienda, inclusi playbook e analisi. Consente inoltre agli utenti di centralizzare e controllare l'infrastruttura IT tramite un dashboard grafico, il controllo degli accessi basato sui ruoli e molte altre funzionalità volte a ridurre la complessità operativa.
La sottoscrizione Red Hat ti consente di ottenere contenuti certificati, un solido ecosistema di partner, l'accesso ai servizi di gestione in hosting e il supporto tecnico per il ciclo di vita che agevolano la realizzazione, la gestione e la scalabilità dell'automazione in tutta l'organizzazione. I clienti possono inoltre avvalersi delle conoscenze e delle competenze degli esperti Red Hat, acquisite attraverso collaborazioni di successo con migliaia di clienti.
Red Hat OpenShift è la versione di Kubernetes per l'ambiente enterprise. Include tutti i componenti aggiuntivi necessari per adattare Kubernetes a questo tipo di ambiente, tra cui registro, reti, telemetria, sicurezza, automazione e servizi.
Red Hat OpenShift permette agli sviluppatori di creare nuove app containerizzate, ospitarle e distribuirle nel cloud con i livelli di scalabilità, controllo e orchestrazione necessari per trasformare le idee migliori in nuove opportunità di business, in modo semplice e rapido.
Quanto tempo si può risparmiare grazie all'automazione?
Rispondi ad alcune brevi domande per calcolare il tempo che potresti risparmiare utilizzando Ansible Automation Platform per l'automazione dell'IT della tua azienda.