YAML ha guadagnato molta popolarità negli ultimi anni quando è diventato parte di strumenti, tecnologie e processi DevOps cruciali come Ansible, Kubernetes, pipeline CI/CD e così via.
Abbiamo già trattato molti tutorial su Ansible e Kubernetes. Ho pensato di trattare gli elementi essenziali di YAML in modo che tu debba essere consapevole per un lavoro più fluido con la configurazione degli strumenti DevOps.
Cos'è YAML?
YAML sta per "YAML non è un linguaggio di markup" originariamente era l'acronimo di "Yet Another Markup Language". YAML è un linguaggio di "serializzazione dei dati" e fondamentalmente un formato di dati strutturati leggibile dall'uomo.
È progettato per essere letto e scrivere amichevole. La funzionalità di serializzazione degli oggetti di YAML si presenta come un'alternativa praticabile a JSON. YAML è un superset di JSON con l'uso dell'ambito basato sull'indentazione per denotare la struttura come Python.
Ecco un esempio di YAML di esempio:
---
Student-ID: 314159
First-Name: Linus
Last-Name: Torvalds
Phone-numbers:
- 281.555.7777
- 832.676.8888
- 937.996.9999
Addresses:
- Street: 123 Main St.
- City: Houston
- State: Tx
---
Regole di base di YAML da ricordare sempre
Se non vuoi vedere errori ripetuti durante l'analisi del tuo file YAML, devi sempre tenere a mente quanto segue mentre lavori su YAML:
- Le schede NON sono consentite in YAML. Dovresti usare lo spazio per il rientro.
- Sebbene la quantità di spazio non abbia importanza fintanto che il rientro del nodo figlio è maggiore del genitore, è buona norma mantenere lo stesso numero di spazi.
- Deve esserci spazio tra i diversi elementi di YAML (spiegato più avanti).
- YAML fa distinzione tra maiuscole e minuscole.
- Il file YAML dovrebbe terminare con estensioni come
.yaml
o.yml
. - YAML consente la codifica UTF-8, UTF-16 e UTF-32.
Capiamo ora la sintassi YAML.
Elementi di un file YAML:sintassi di base
Un file YAML viene utilizzato per descrivere i dati. In un file YAML il contenuto riguarda una raccolta di coppie chiave-valore dove il valore può essere qualsiasi cosa, da una stringa a un albero.
Capiamolo con un esempio. Questo è un file manifest del servizio Kubernetes.
kind: Service
metadata:
name: web-app-svc
spec:
type: NodePort
ports:
- port: 8080 #service port
targetPort: 8080 #Pod Port
nodePort: 30012 #Node Port from the range - 30000-32767
selector:
app: web-app
È autospiegabile che si tratta di un insieme di elementi coppia chiave-valore:Name: Value
.
Come puoi vedere dal file sopra, un file YAML è costituito da un numero di elementi diversi. Insieme, possono essere usati per descrivere un'ampia varietà di strutture.
1. Spazi o rientro
In YAML, rientri con spazi bianchi, non con tabulazioni. E DEVE esserci uno spazio tra gli elementi.
Specificazione corretta:
Kind:Service
Specificazione errata:
Kind:Service
Perché non c'è spazio dopo i due punti nell'istruzione precedente!
2. Commenti in YAML
I commenti possono essere definiti inserendo un hash davanti a un elemento '#
'. I commenti possono essere inseriti all'inizio di una riga in qualsiasi punto della riga.
Se esamini il nostro file di configurazione YAML abbiamo tre commenti in linea come "#porta di servizio" ecc.
3. Scalare (valore-chiave)
Gli scalari sono le stringhe ei numeri che compongono i dati nella pagina. In parole povere sono le coppie chiave-valore.
kind: Service
metadata:
name: web-app-svc
4. Raccolte ed elenchi
Gli elementi o membri di elenco e raccolta sono le righe che iniziano allo stesso livello di rientro, iniziando con un trattino seguito da uno spazio.
- web-app-prod
- prod-deployments
- prom-monitored
È un elenco di base con ogni elemento dell'elenco posizionato in una riga separata con un trattino di apertura.
5. Raccolte nidificate
Se vuoi creare una sequenza nidificata con elementi e sottoelementi, puoi farlo inserendo un singolo spazio prima di ogni trattino negli elementi secondari.
-
- web-app-prod
- prod-deployments
- prom-monitored
-
- web-app-test
- staging-deployments
- not-monitored
6. Dizionari
I dizionari comprendono una key: value
formato con contenuto rientrato.
ports:
- port: 8080 #service port
targetPort: 8080 #Pod Port
nodePort: 30012 #Node Port from the range - 30000-32767
Puoi unire e confondere raccolte di elenchi e dizionari in questo modo:
ports:
- port: 8080 #service port
targetPort: 8080 #Pod Port
nodePort:
- 30012
- 30013
- 30014
Questi sono concetti molto basilari di YAML ma essenziali per un ingegnere DevOps.
Non hai bisogno di un editor speciale per YAML. Il tuo editor di testo preferito dovrebbe già supportare YAML o utilizzare un plug-in, se necessario.
Ci sono molte cose che puoi approfondire e imparare. Per questo, puoi sempre fare riferimento alla documentazione ufficiale di YAML.
Vuoi essere un amministratore di sistema o un DevOps migliore? Diventa un membro di Linux Handbook oggi.