Esta página proporciona una descripción general básica de la sintaxis YAML correcta, que es cómo se expresan los libros de jugadas de Ansible (nuestro lenguaje de administración de configuración).

Usamos YAML porque es más fácil de leer y escribir para los humanos que otros formatos de datos comunes como XML o JSON. Además, hay bibliotecas disponibles en la mayoría de los lenguajes de programación para trabajar con YAML.

Es posible que también desee leer Trabajar con libros de jugadas al mismo tiempo para ver cómo se utiliza en la práctica.

Conceptos básicos de YAML

Para Ansible, casi todos los archivos YAML comienzan con una lista. Cada elemento de la lista es una lista de pares clave / valor, comúnmente llamado “hash” o “diccionario”. Entonces, necesitamos saber cómo escribir listas y diccionarios en YAML.

Hay otra pequeña peculiaridad en YAML. Todos los archivos YAML (independientemente de su asociación con Ansible o no) pueden comenzar opcionalmente con --- y terminar con .... Esto es parte del formato YAML e indica el inicio y el final de un documento.

Todos los miembros de una lista son líneas que comienzan en el mismo nivel de sangría que comienzan con un "- " (un guión y un espacio):

---# A list of tasty fruits- Apple
- Orange
- Strawberry
- Mango
...

Un diccionario se representa en un simple key: value formulario (los dos puntos deben ir seguidos de un espacio):

# An employee recordmartin:name: Martin D'vloper
  job: Developer
  skill: Elite

Son posibles estructuras de datos más complicadas, como listas de diccionarios, diccionarios cuyos valores son listas o una combinación de ambos:

# Employee records-martin:name: Martin D'vloper
    job: Developer
    skills:- python
      - perl
      - pascal
-tabitha:name: Tabitha Bitumen
    job: Developer
    skills:- lisp
      - fortran
      - erlang

Los diccionarios y las listas también se pueden representar de forma abreviada si realmente desea:

---martin:name: Martin D'vloper,job: Developer,skill: Elite['Apple','Orange','Strawberry','Mango']

Estos se denominan “colecciones de flujo”.

Ansible realmente no los usa demasiado, pero también puede especificar un valor booleano (verdadero / falso) en varias formas:

create_key: yes
needs_agent: no
knows_oop:Truelikes_emacs:TRUEuses_cvs:false

Use minúsculas ‘verdadero’ o ‘falso’ para los valores booleanos en los diccionarios si desea ser compatible con las opciones predeterminadas de yamllint.

Los valores pueden abarcar varias líneas usando | o >. Abarcando varias líneas usando un “Escalar de bloque literal” | incluirá las nuevas líneas y los espacios finales. Uso de un “escalar de bloque plegado” > plegará nuevas líneas en espacios; se utiliza para facilitar la lectura y la edición de lo que de otro modo sería una línea muy larga. En cualquier caso, se ignorará la sangría. Algunos ejemplos son:

include_newlines:|
            exactly as you see
            will appear these three
            lines of poetryfold_newlines:>
            this is really a
            single line of text
            despite appearances

Mientras que en lo anterior > Por ejemplo, todas las líneas nuevas se doblan en espacios, hay dos formas de hacer que se mantenga una línea nueva:

fold_some_newlines:>
    a
    b

    c
    d
      e
    f
same_as:"a bnc dn  enfn"

Combinemos lo que hemos aprendido hasta ahora en un ejemplo YAML arbitrario. Esto realmente no tiene nada que ver con Ansible, pero le dará una idea del formato:

---# An employee recordname: Martin D'vloper
job: Developer
skill: Elite
employed:Truefoods:- Apple
  - Orange
  - Strawberry
  - Mango
languages:perl: Elite
  python: Elite
  pascal: Lame
education:|
  4 GCSEs
  3 A-Levels
  BSc in the Internet of Things

Eso es todo lo que necesitas saber sobre YAML para empezar a escribir. Ansible libros de jugadas.

Gotchas

Si bien puede poner casi cualquier cosa en un escalar sin comillas, existen algunas excepciones. Dos puntos seguidos de un espacio (o nueva línea) ": " es un indicador para un mapeo. Un espacio seguido del signo de libra " #" comienza un comentario.

Debido a esto, lo siguiente dará como resultado un error de sintaxis YAML:

foo:somebody said I should put a colon here: so I did

windows_drive:c:

… pero esto funcionará:

windows_path: c:windows

Querrá citar valores hash con dos puntos seguidos de un espacio o al final de la línea:

foo: 'somebody said I should put a colon here: so I did'

windows_drive: 'c:'

… y luego se conservará el colon.

Alternativamente, puede usar comillas dobles:

foo: "somebody said I should put a colon here: so I did"

windows_drive: "c:"

La diferencia entre comillas simples y comillas dobles es que entre comillas dobles puede usar escapes:

foo: "a t TAB and a n NEWLINE"

La lista de escapes permitidos se puede encontrar en la Especificación YAML en “Secuencias de escape” (YAML 1.1) o “Caracteres de escape” (YAML 1.2).

El siguiente es YAML inválido:

foo: "an escaped ' single quote"

Además, Ansible usa “var” para las variables. Si un valor después de dos puntos comienza con “”, YAML pensará que es un diccionario, por lo que debe citarlo, así:

foo: " variable "

Si su valor comienza con una cotización, se debe cotizar el valor completo, no solo una parte. A continuación, se muestran algunos ejemplos adicionales de cómo citar correctamente las cosas:

foo: " variable /additional/string/literal"
foo2: " variable \backslashes\are\also\special\characters"
foo3: "even if it's just a string literal it must all be quoted"

No es válido:

foo: "E:\path\"rest\of\path

Además de ' y " hay una serie de caracteres que son especiales (o reservados) y no se pueden utilizar como el primer carácter de un escalar sin comillas: [] > is [ all , valid

flow mapping: { key: "you should [ use , quotes here"

La conversión booleana es útil, pero esto puede ser un problema cuando desea un literal yes u otros valores booleanos como una cadena. En estos casos, solo use comillas:

non_boolean: "yes"
other_string: "False"

YAML convierte ciertas cadenas en valores de punto flotante, como la cadena 1.0. Si necesita especificar un número de versión (en un archivo requirements.yml, por ejemplo), deberá citar el valor si parece un valor de punto flotante:

version: "1.0"

Ver también

Trabajar con libros de jugadas

Aprenda qué pueden hacer los libros de jugadas y cómo escribirlos / ejecutarlos.

YAMLLint

YAML Lint (en línea) le ayuda a depurar la sintaxis YAML si tiene problemas

Directorio de ejemplos de GitHub

Archivos de playbook completos de la fuente del proyecto github

Referencia de sintaxis YAML de Wikipedia

Una buena guía para la sintaxis de YAML

Lista de correo

¿Preguntas? ¿Ayudar? Ideas? Pasa por la lista de Grupos de Google

irc.freenode.net

#ansible canal de chat de IRC y #yaml para preguntas específicas de YAML

Especificación YAML 1.1

La especificación para YAML 1.1, que PyYAML y libyaml están implementando actualmente

Especificación YAML 1.2

Para completar, YAML 1.2 es el sucesor de 1.1