Skip to main content

YAML

YAML (YAML Ain't Markup Language), a pesar de que su nombre incluye "lenguaje", no es un lenguaje de programación en el sentido tradicional. En cambio, YAML es una especificación para un formato de serialización de datos. Define una manera de representar datos de forma estructurada y legible por humanos usando texto simple.

Aunque YAML puede parecer un lenguaje debido a su sintaxis y capacidad de estructurar datos, no posee capacidades de programación, como ejecución de código o lógica condicional. En cambio, se usa principalmente para representar configuraciones, estructuras de datos e información en un formato fácil de leer y escribir, adecuado para uso humano y también para máquinas.

En YAML, la estructuración de los datos se basa en pares de clave-valor, similar a muchos otros formatos de datos (JSON es un excelente ejemplo), pero con una propuesta de ser menos verboso y más directo al punto.

YAML se usa frecuentemente para configuración de aplicaciones, estructuración de datos, comunicación entre sistemas y mucho más. En algún momento necesitarás crear un archivo YAML y será más temprano de lo que piensas.

En el mundo DevOps usamos mucho programación declarativa y YAML es muy utilizado para este propósito.

Algunas características de YAML incluyen:

  • Legibilidad humana: YAML está diseñado para ser fácil de leer y escribir, haciéndolo adecuado para configuración manual y lectura por humanos.

  • Sintaxis simple: YAML usa una sintaxis simple basada en espacios y sangría para estructurar datos. Esto lo hace más intuitivo que algunos otros formatos de serialización, como JSON.

  • Soporte para diversos tipos de datos: YAML soporta strings, números, listas, diccionarios y estructuras anidadas, haciéndolo lo suficientemente flexible para representar una variedad de datos.

  • Extensibilidad: YAML es fácilmente extendido para soportar tipos de datos adicionales, como fechas, expresiones regulares y mucho más, haciéndolo adecuado para una variedad de casos de uso.

Independiente de lenguaje: Como es un formato de datos independiente de lenguaje, YAML puede ser procesado por una amplia variedad de lenguajes de programación.

Vamos a analizar 3 estructuras de datos que expresan la misma cosa.

<Servers>
<Server>
<name>Server1</name>
<status>active</status>
<ip>192.168.0.10</ip>
</Server>
<Server>
<name>Server2</name>
<status>active</status>
<ip>192.168.0.20</ip>
</Server>
</Servers>
{
"servers": [
{
"name": "Server1",
"status": "active",
"ip": "192.168.0.10"
},
{
"name": "Server1",
"status": "active",
"ip": "192.168.0.10"
}
]
}
servers:
- name: Server1
status: active
ip: 192.168.0.10
- name: Server2
status: active
ip: 192.168.0.20

¿Puedes observar cuánto más simple es con YAML? No tiene llaves, no tiene comas, no necesita comillas en todos lados, no tiene repetición de nombres. ¡Es vida!

El formato en YAML es crucial. Es simple, pero un espacio hace la diferencia.

Los archivos YAML aparecerán con las extensiones .yaml o .yml. ¡Hasta hoy no han definido cuál es el estándar! Ambas extensiones son reconocidas por los sistemas operativos como archivos yaml.

Aquí un ejemplo simple de clave-valor. Imaginemos que queremos información sobre david. Este YAML solo trae información sobre 1 persona.

El formato para clave-valor en YAML es clave: valor siendo necesario el espacio después del :.

name: david
age: 38
status: studing
position: devsecops

El valor para una clave puede ser una lista/array o un diccionario. Podemos tener cuantas claves queramos.

Un ejemplo de lista:

person:
- name: david
- name: maria
- name: carlos

Vale recordar que una lista es algo ordenado, por lo que el ejemplo abajo es diferente del ejemplo arriba. person:

person:
- name: maria
- name: carlos
- name : david

También podemos tener un diccionario/map, o sea, diferentes datos sobre el elemento: Vamos a transformar el primer ejemplo en un diccionario y vamos a incluir una lista de teléfono. También vamos a incluir otro diccionario dentro de este.

david:
age: 38
status: studing
position: devsecops
telephone:
- mobile: +5511999998888
- home: +551234567890
address:
city: vila velha
state: ES

El orden de las claves no importa. Siempre buscamos un valor por la clave y no por la posición. El siguiente ejemplo es lo mismo que el ejemplo arriba.

david:
position: devsecops
status: studing
address:
city: vila velha
state: ES
age: 38
telephone:
- mobile: +5511999998888
- home: +551234567890

Cuando estamos haciendo una lista tomamos un conjunto completo. El ejemplo arriba no es bueno, vamos a generalizar para servir para cualquier persona.

person:
name: david
age: 38
status: studing
working: true
position: devsecops
telephone:
- mobile: +5511999998888
- home: +551234567890
address:
city: vila velha
state: ES

Ahora podemos tener una lista de personas que son diccionarios/map. Dentro de cada diccionario tenemos más listas y más diccionarios.

person:
- name: david
age: 38
status: studing
position: devsecops
working: true
telephone:
- mobile: +5511999998888
- home: +551234567890
address:
city: vila velha
state: ES

- name: carlos
age: 52
status: drinking
position: devsecops
working: true
telephone:
- mobile: +5511777776666
- home: +550987654321
address:
city: ribeirao preto
state: SP