Skip to content

Tema:

Trabajando con archivos yaml

Introducción

En esta guia veremos el tipo de archivo mas comun a la hora de trabajar con herramientas de cicd. Yaml.

Objetivo

Objetivo General:

  • El objetivo general es aprender a utilizar los archivos yaml, ya que son la base de la gran mayoria de herramientas devops que nos podemos encontrar

Objetivos secundarios

  • Comprender la sintaxis de un archivo YAML
  • Crear un archivo en formato YAML

Desarrollo del Tema

Un YAML es un tipo de archivo de texto donde escribimos configuraciones de una manera ordenada y fácil de leer. Lo realiza en un formato clave valor y es utilizado por herramientas como kubernentes, azure devops, gitlab ci, etc.

Laboratorio para el Estudiante

Acceder al laboratorio.

  1. Ingresar al servidor de laboratorio con la llave proporcionada.

    export LAB=X
    ssh student@lab-${LAB}-aio 
    

  2. Cambiar al usuario root

    sudo -i
    

Instalación de herramienta de procesamiento

  1. Descargue el binario
    curl -Lo yq https://github.com/mikefarah/yq/releases/download/v4.24.2/yq_linux_amd64
    
  2. Asigne los permisos de ejecucion al binario
    chmod +x ./yq
    
  3. Mueva el binario al PATH de binarios
    mv yq /bin/yq
    
  4. Compruebe que se instalo correctamente

    yq -V
    

  5. Desde la terminal cree una carpeta llamada intro-yaml y acceda a ella

    mkdir intro-yaml ; cd intro-yaml
    

Indentación

  1. Cree un archivo llamado indent.yaml y escriba el siguiente contenido:

    1
    2
    3
    4
    5
    6
    7
    title: First YAML
    name: Estudiante
    profession: Software Developer
    hobbies:
      - code
      - coffee
    - swimming
    

  2. Validar la sintaxis con la herramienta de yq ejecutando

    yq e indent.yaml
    

  3. Corregir la indentación del archivo indent.yaml en la línea que especifica el error

    1
    2
    3
    4
    5
    6
    7
    title: First YAML
    name: Estudiante
    profession: Software Developer
    hobbies:
      - code
      - coffee
      - swimming
    

  4. Validar nuevamente la sintaxis con la herramienta de yq ejecutando

    yq e indent.yaml
    

  5. Cambiar el archivo indent.yaml la lista de hobbies, eliminar los guiones

    1
    2
    3
    4
    5
    6
    7
    title: First YAML
    name: Estudiante
    profession: Software Developer
    hobbies:
      code
      coffee
      swimming
    

  6. Validar la sintaxis

    yq e indent.yaml
    

  7. Editar el archivo indent.yaml agregando un nuevo bloque despues de hobbies

    1
    2
    3
    4
    5
    6
    7
    8
    title: First YAML
    name: Estudiante
    profession: Software Developer
    hobbies:
      principal:
        code
        coffee
        swimming
    

  8. Validar la sintaxis

    yq e indent.yaml
    

  9. Agregar otro bloque al archivo indent.yaml debajo del bloque de principal que contenga una lista de valores

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    title: First YAML
    name: Estudiante
    profession: Software Developer
    hobbies:
      principal:
        code
        coffee
        swimming
      secundaries:
        - karaoke
        - travel
        - shopping
    

  10. Validar la sintaxis

    yq e indent.yaml
    

  11. Agregar a cada hobby secundario una descripcion

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    title: First YAML
    name: Estudiante
    profession: Software Developer
    hobbies:
      principal:
        code
        coffee
        swimming
      secundaries:
        - karaoke: session with friends
        - travel: local turism
        - shopping: clothes and grocery
    

  12. Validar la sintaxis

    yq e indent.yaml
    

Acciones con yq

  1. Obtenga únicamente el título del yaml indent.yaml

    yq '.title' indent.yaml
    

  2. Obtenga el valor del campo profession

    yq '.profession' indent.yaml
    

  3. Obtenga el listado de strings de hobbies.principal

    yq '.hobbies.principal' indent.yaml
    

  4. Verifique que el bloque de hobbies.secundaries tenga un key llamado karaoke

    yq '.hobbies.secundaries[] | select(has("karaoke"))' indent.yaml
    

  5. Obtenga el numero de orden de los elementos de la lista hobbies.secundaries

    yq '.hobbies.secundaries | keys' indent.yaml
    

  6. Actualice el valor del primer elemento de la lista hobbies.secundaries

    yq '.hobbies.secundaries[0].karaoke = "more stuff"' indent.yaml
    

Linter

Esta parte se provee como sugerencia y reemplazo de la herramienta yq

!!! example note "Instalación de CLI yamllint" Instalar la herramienta yamllint segun el OS a ocupar Installing yamllint === "CentOS based"

dnf install epel-release -y 
dnf install yamllint -y
2. Compruebe que esta funcionando y la version instalada
yamllint -v

  1. Modifique el archivo indent.yaml quitando una indentacion a modo de probar la herramienta

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    title: First YAML
    name: Estudiante
    profession: Software Developer
    hobbies:
      principal:
        code
        coffee
        swimming
      secundaries:
        - karaoke: session with friends
        - travel: local turism
      shopping: clothes and grocery
    

  2. Valide la sintaxis del archivo indent.yaml con la herramienta yamllint

    yamllint indent.yaml
    

  3. Corrija el archivo para que tenga una sintaxis valida y vuelva a validar

    yamllint indent.yaml
    

  4. Cree un archivo llamado config en el path ~/.config/yamllint

    mkdir ~/.config/yamllint
    vi ~/.config/yamllint/config
    

  5. Edite el archivo indent.yaml agregando una linea en blanco al final

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    title: First YAML
    name: Estudiante
    profession: Software Developer
    hobbies:
      principal:
        code
        coffee
        swimming
      secundaries:
        - karaoke: session with friends
        - travel: local turism
        - shopping: clothes and grocery
    # dejar esta linea en blanco
    

  6. Valide la sintaxis del archivo indent.yaml con la herramienta yamllint

    yamllint indent.yaml
    

  7. Agregue el siguiente contenido al archivo ~/.config/yamllint/config

    1
    2
    3
    4
    5
    6
    7
    extends: relaxed
    
    rules:
       line-length: disable
       empty-lines:
         max: 1
         max-end: 1
    

  8. Valide la sintaxis del archivo indent.yaml con la herramienta yamllint

    yamllint indent.yaml
    

Configurar vim para archivos YAML

  1. Cree un archivo llamado .vimrc en la carpeta home\

    touch ~/.vimrc
    

  2. Edite el archivo ~/.vimrc agregando el siguiente contenido

    set number
    autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab
    let g:indentLine_char = '⦙'
    

  3. Instale el plugin indentLine ejecutando

    git clone https://github.com/Yggdroot/indentLine.git ~/.vim/pack/vendor/start/indentLine
    vim -u NONE -c "helptags  ~/.vim/pack/vendor/start/indentLine/doc" -c "q"
    

  4. Abra el archivo indent.yaml y verifique que se muestra de la siguiente manera

      1 title: First YAML
      2 name: Estudiante
      3 profession: Software Developer
      4 hobbies:
      5   principal:
      6   ⦙ code
      7   ⦙ coffee
      8   ⦙ swimming
      9   secundaries:
     10   ⦙ - karaoke: session with friends
     11   ⦙ - travel: local turism
     12   ⦙ - shopping: clothes and grocery
    

  5. Edite el archivo indent.yaml dejando una línea mal escrita

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    title: First YAML
    name: Estudiante
    profession: Software Developer
    hobbies:
      principal:
        code
        coffee
        swimming
      secundaries:
        - karaoke: session with friends
        - travel: local turism
    - shopping: clothes and grocery
    

  6. Guarde los cambios

  7. Instale el plugin ALE

    mkdir -p ~/.vim/pack/git-plugins/start
    git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.vim/pack/git-plugins/start/ale
    

  8. Edite el archivo ~/.vimrc agregando las siguientes líneas

    let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
    let g:ale_sign_error = '✘'
    let g:ale_sign_warning = '⚠'
    

  9. Edite el archivo indent.yaml con Vim

    vi indent.yaml
    
    Observe que ahora muestra la línea errónea junto con un símbolo

  10. En el editor Vim ubíquese sobre la línea con errores y observe que muestra un mensaje en la parte de abajo con el error

  11. Corrija el error indentando correctamente

  12. Guarde los cambios

  13. Limpiar ambiente

    cd ~
    
    rm indent.yaml