GNU/Linux >> Tutoriales Linux >  >> Linux

YAML para principiantes

YAML no es un lenguaje de marcado (YAML), y en cuanto a los formatos de configuración, es agradable a la vista. Tiene una estructura visual intuitiva y su lógica es bastante simple:las viñetas sangradas heredan las propiedades de las viñetas principales.

Pero esta aparente simplicidad puede ser engañosa.

Es fácil (y engañoso) pensar en YAML como una simple lista de valores relacionados, no más compleja que una lista de compras. Hay un título y algunos elementos debajo de él. Los elementos debajo del encabezado se relacionan directamente con él, ¿verdad? Bueno, puedes probar esta teoría escribiendo un poco de YAML válido.

Abra un editor de texto e ingrese este texto, conservando los guiones en la parte superior del archivo y los espacios iniciales para los dos últimos elementos:

---
Store: Bakery
  Sourdough loaf
  Bagels

Guarde el archivo como ejemplo.yaml (o similar).

Si aún no tiene yamllint instalado, instalarlo:

$ sudo dnf install -y yamllint

Un linter es una aplicación que verifica la sintaxis de un archivo. El yamllint El comando es una excelente manera de garantizar que su YAML sea válido antes de entregarlo a cualquier aplicación para la que esté escribiendo YAML (Ansible, por ejemplo).

Usa yamllint para validar su archivo YAML:

$ yamllint --strict shop.yaml || echo “Fail”
$

Pero cuando se convierte a JSON con un script de conversión simple, la estructura de datos de este YAML simple se vuelve más clara:

$ ~/bin/json2yaml.py shop.yaml
{“Store”: “Bakery Sourdough loaf Bagels”}

Analizado sin el contexto visual de los saltos de línea y la sangría, el alcance real de sus datos se ve muy diferente. Los datos son en su mayoría planos, casi desprovistos de jerarquía. No hay indicios de que el pan de masa fermentada y los bagels sean hijos del nombre de la tienda.

[ A los lectores también les gustó: Ansible:automatización de TI para todos ]

Cómo se almacenan los datos en YAML

YAML puede contener diferentes tipos de bloques de datos:

  • Secuencia:valores enumerados en un orden específico. Una secuencia comienza con un guión y un espacio (- ). Puede pensar en una secuencia como una lista de Python o una matriz en Bash o Perl.
  • Mapeo:pares de clave y valor. Cada clave debe ser única, y el orden no importa. Piense en un diccionario de Python o una asignación de variables en un script de Bash.

Hay un tercer tipo llamado scalar , que son datos arbitrarios (codificados en Unicode) como cadenas, números enteros, fechas, etc. En la práctica, estas son las palabras y los números que escribes cuando creas mapas y secuencias de bloques, por lo que no pensarás en ellos más de lo que piensas en las palabras de tu lengua materna.

Al construir YAML, puede ser útil pensar en YAML como una secuencia de secuencias o como un mapa de mapas, pero no como ambos.

Bloques de mapeo YAML

Cuando inicia un archivo YAML con una declaración de asignación, YAML espera una serie de asignaciones. Un bloque de mapeo en YAML no se cierra hasta que se resuelve y se crea explícitamente un nuevo bloque de mapeo. Solo se puede crear un nuevo bloque cualquiera aumentando el nivel de sangría (en cuyo caso, el nuevo bloque existe dentro del bloque anterior) o resolviendo la asignación anterior e iniciando un bloque de asignación adyacente.

La razón por la que el ejemplo original de YAML en este artículo no produce datos con una jerarquía es que en realidad es solo un bloque de datos:la clave Store tiene un valor único de Bakery Sourdough loaf Bagels . YAML ignora el espacio en blanco porque no se ha iniciado ningún bloque de mapeo nuevo.

¿Es posible corregir el YAML de ejemplo anteponiendo cada elemento de secuencia con un guión y un espacio?

---
Store: Bakery
  - Sourdough loaf
  - Bagels

    Nuevamente, esto es YAML válido, pero sigue siendo bastante plano:

    $ ~/bin/json2yaml.py shop.yaml
    {“Store”: “Bakery - Sourdough loaf - Bagels”}

    El problema es que este archivo YAML abre un bloque de mapeo y nunca lo cierra. Para cerrar la Store bloquear y abrir uno nuevo, debe iniciar un nuevo mapeo. El valor del mapeo puede ser una secuencia, pero necesita una clave primero.

    Esta es la resolución correcta (y ampliada):

    ---
    Store:
      Bakery:
        - ‘Sourdough loaf’
        - ‘Bagels’
      Cheesemonger:
        - ‘Blue cheese’
        - ‘Feta’

    En JSON, esto se resuelve en:

    {“Store”: {“Bakery”: [“Sourdough loaf”, “Bagels”],
    “Cheesemonger”: [“Blue cheese”, “Feta”]}}

    Como puede ver, esta directiva YAML contiene una asignación (Store ) a dos valores secundarios (BakeryCheesemonger ), cada uno de los cuales está asignado a una secuencia secundaria.

    Bloques de secuencia YAML

    Los mismos principios son válidos si inicia una directiva YAML como una secuencia. Por ejemplo, esta directiva YAML es válida:

    Flour
    Water
    Salt

      Cada elemento es distinto cuando se ve como JSON:

      [“Flour”, “Water”, “Salt”]

      Pero este archivo YAML no válido porque intenta iniciar un bloque de mapeo en un nivel adyacente a un bloque de secuencia :

      ---
      - Flour
      - Water
      - Salt
      Sugar: caster

      Se puede reparar moviendo el bloque de mapeo a la secuencia:

      ---
      - Flour
      - Water
      - Salt
      - Sugar: caster

      Como siempre, puede incrustar una secuencia en su elemento de mapeo:

      ---
      - Flour
      - Water
      - Salt
      - Sugar:
          - caster
          - granulated
          - icing

      Visto a través de la lente del alcance JSON explícito, ese fragmento YAML dice así:

      [“Flour”, “Salt”, “Water”, {“Sugar”: [“caster”, “granulated”, “icing”]}]

      [ Una guía gratuita de Red Hat:5 pasos para automatizar su negocio. ] 

      Sintaxis YAML

      Si desea escribir cómodamente en YAML, es vital conocer su estructura de datos. Como puede ver, no hay mucho que tenga que recordar. Sabes sobre mapeo y secuencia bloques, para que sepas todo lo que necesitas para trabajar. Todo lo que queda es recordar cómo interactúan y no interactúan entre sí. ¡Feliz codificación!


      Linux
      1. MX Linux 17:una distribución mejorada hecha para principiantes

      2. Comando dir de Linux para principiantes (10 ejemplos)

      3. Comando killall de Linux para principiantes (8 ejemplos)

      4. Ejemplos de comandos DNF para principiantes

      5. Comprender YAML para Ansible

      16 ejemplos prácticos del comando Linux LS para principiantes

      Comando mv de Linux explicado para principiantes (8 ejemplos)

      Tutorial de secuencias de comandos de Bash para principiantes

      Más de 20 comandos FFmpeg para principiantes

      Tutorial de Bash Heredoc para principiantes

      Estructura de directorios de Linux explicada para principiantes