Archivos Yaml

Yaml es un lenguaje de serialización como XML o JSON. Su finalidad es utilizar un formato común estandarizado que permita la transferencia de datos entre varias aplicaciones escritas con lenguajes de programación diferentes, cada una con su propia estructura de datos y tecnologías propias.

Este tipo de ficheros es muy utilizado en ficheros de configuración. Aplicaciones como Docker, Kubernetes o GitHub Actions lo utilizan.

✅ Es un lenguaje muy fácil de leer por un humano ya que carece de símbolos como { } ; < > que utilizan XML o JSON para estructurar la información.

❌ Es muy estricto con la indentación. Esto suele ocasionar problemas al tener algún espacio en blanco del que no nos demos cuenta y no seamos capaces de localizar. Para evitar esto existen diferentes soluciones, yo recomiendo las siguientes:

  • Validar tu archivo en algún sitio web como este. Lo más sencillo del mundo, solo hay que copiar y pegar el código o subir un archivo Yaml. También tienes validadores más sofisticados que comprueban archivo sde configuración de Docker o Kubernetes.
  • Descargarse algún plugin para tu editor de código que permita validar este tipo de archivos. A mi me gusta la extensión oficial de Yaml de Visual Studio Code. No solo comprueba la indentación, además tiene funciones de autocompletar que nunca están de más. Pongo una captura debajo ⬇️

Sintaxis básica

  • Clave – Valor
    • cadenas de caracteres
    • números
    • valores booleanos
  • Comentarios
  • Objetos
  • Listas

Clave – Valor.

Es decir una asignación de un valor a una variable. Es la operación más básica que podemos realizar. Es posible asignar un tipo de dato básico (cadena de caracteres o un número) estructuras mas complejas como un objeto, una lista o una lista de objetos. Yaml es muy versátil en la denominación de las variables. Permite utilizar espacios en blanco, la utilización de comillas👍. Lo iremos viendo en los proximos ejemplos.

Si almacenamos cadenas de caracteres tenemos la misma libertad que en los nombres de las variables, es optativo la utilización de " ,' o sin comillas.

Lo más importante. Para realizar la asignación es necesario introducir : seguido de un espacio en blanco (esta es una de las cosas por la que Yaml es muy especial).

apellido1: "Gutierrez"
"apellido 2": 'Hernandez'
nombre: Marcos
nombre completo: Gutierrez Hernandez, Marcos

Números: Aquí no hay misterio. Ojo no poner el número entre comillas porque lo transformas a cadena de caracteres

edad: 20
notaMedia: 8,7

Valores booleanos: Yaml permite la utilización de «true, false», «yes, no» y «on, off»

matriculado: true
baja paternidad: no
estadoIluminacion: off

Comentarios

Personalmente soy muy fan de los comentarios en archivos de configuración. Cuando empiezan a crecer y a tomar complejidad creo que ayudan mucho a interpretar que está ocurriendo. No es raro ver archivos Yaml en el que deben introducirse comandos y a veces son un poco complicados por lo que los comentarios facilitan la labor. Además pueden servir como apuntes para futuros proyectos. Para introducir comentarios en un fichero Yaml todo lo que se encuentre a continuación de una # será un comentario.

# Esto es un comentario
apellido1: "Gutierrez" # Esto es otro comentario
"apellido 2": 'Hernandez'
nombre: Marcos
nombre completo: Gutierrez Hernandez, Marcos

Objetos

Podemos crear objetos también. Lo que hacer es indentar el texto. Aqui es donde tenemos que tener cuidado con los espacios en blanco, es muy frecuente que cometamos algún error en este punto. En el ejemplo vemos el objeto Alumno que tiene varias propiedades. Es muy fácil de interpretar por una persona (uno de los puntos fuertes de Yaml)

Alumno:
    apellido1: "Gutierrez"
    nombre: Marcos
    edad: 20
    notaMedia: 8.9

Listas

Las listas nos permite guardar varios elementos. Son los llamados arrays en otros lenguajes de programación. Existen 2 formas de trabajar con listas. Una lista puede contener otra lista como elemento.

  • Podemos envolver los diferentes elementos de una lista entre [ ] y separar cada uno de ellos con una comas.
  • Otra forma es utilizar un – por cada elemento. Cada elemento debe comenzar en una nueva línea correctamente indentada (otro punto problemático)

Si vamos a trabajar con listas de valores mucho mejor la primera opción pero si lo que vamos a guardar son objetos la segunda se ajusta mucho mejor.

estaciones:
    - "Verano"
    - "Otoño"
    - "Invierno"
    - "Primavera"

estaciones: ["Verano","Otoño","Invierno","Primavera"]

En el siguiente ejemplo podemos ver la utilidad de utilizar -. Aporta mucha más claridad trabajar de esta manera cuando tengamos que gestionar objetos.

Clase:
    - Alumno:
        apellido1: "Gutierrez"
        nombre: Marcos
        nombre Completo: Gutierrez Hernandez, Marcos
        edad: 20
        notaMedia: 8.9
        asignaturas_cursadas: ["Ingles,"Lengua","Fisica"]
    - Alumno:
        apellido1: Menendez
        nombre: Raul
        edad: 19
        notaMedia: 5.9
        asignaturas_cursadas: ["Matematicas","Fisica"]

Cadenas de texto multilinea

Es muy probable que cuando trabajemos con archivos de configuración necesitemos introducir secuencias de comandos donde es necesario respetar los saltos de línea. Esto es posible introduciendo el caracter | y en la siguiente linea se deben escribir explicitamente las intrucciones.

En el siguiente ejemplo que podría encontrarse en cualquier archivo de configuración se muestra cómo podemos pasar instrucciones a la linea de comandos formadas por varias lineas.

cadena: |
    linea 1
    linea 2
    linea 3
data:
    mosquito.conf: |
    log_dest stdout
    log_type all
    log_timestap true
    listener 9001
command:
    - sh
    - -c
    - |
    #!/usr/bin/err bash -e
    http () {
        local path=${1}
        set -- -XGET -s --fail
        # otra cosa
        curl -k "$@" "http://localhost:5601${path}"
    }
    http "/app/kibana"

También podemos utilizar la operación inversa. Querer una cadena de caracteres muy larga de una única línea pero por razones de legibilidad dividirla en varias. Esto es muy típico en comandos que tienen como argumentos URLs o rutas de ficheros. Para hacer esto tenemos que utilizar el caracter > y a continuación escribir las líneas.

comando: >
    mv -i /home/username/Documents/sample.txt
    /home/username/documents/backup/sample1.txt

2 comentarios sobre “Archivos Yaml

Deja un comentario