Luego de mucho trabajar pudimos hallar la solución de esta aprieto que algunos lectores de este sitio han tenido. Si deseas compartir algún detalle puedes aportar tu información.
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
Si posees algún reparo y disposición de renovar nuestro reseña eres capaz de dejar una aclaración y con deseo lo analizaremos.