Aquí está mi archivo de lista de variables vars/blah.yml:
---
stuff:
- stuff1: bill
stuff2: sue
Solo intento obtener los valores de las variables.
Aquí está mi libro de jugadas:
hosts: all
become: yes
vars_files:
- vars/blah.yml
tasks:
- name: test
debug:
var: "{{ item.stuff1 }} {{ item.stuff2 }}"
loop :
- "{{ stuff }}"
Recibo este error.
fatal: [node1]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'list object' has no attribute 'stuff1'\n\nThe error appears to be in '/home/automation/plays/test1.yml': line 11, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - name: test\n ^ here\n"}
¿Alguien puede decirme qué estoy haciendo mal?
Editó el formato de las variables. Sigo obteniendo los mismos resultados.
Respuesta1
TL;DR
loop: "{{ stuff }}"
Historia completa
A diferencia del primero y todavía ampliamente utilizado por defecto with_items:
, a bare loop:
no aplica una automática flatten(level=1)
a los argumentos pasados.
Para más información sobre esta característica, puedes ver:
- la documentación de búsqueda de artículos
- el procedimiento
with_items
de migraciónloop
en la documentación de bucles ansibles.
Si su ejemplo estaba usandowith_items
with_items:
- "{{ stuff }}"
la lista resultante seguirá siendo exactamente la que definiste en tu archivo.
Ahora usado conloop
loop:
- "{{ stuff }}"
está recorriendo una lista de listas que se parece a (tenga en cuenta el guión solo en la parte superior del ejemplo siguiente y la sangría del resto del contenido: no es un error tipográfico).
-
- stuff1: bill
stuff2: sue
Entonces, el primer elemento que obtienes en tu bucle es en realidad tu lista completa en tu archivo var.
Para solucionarlo, simplemente pase la variable correctamente a loop
, es decir
loop: "{{ stuff }}"
Respuesta2
El formato de su archivo de variables es incorrecto. El nivel superior no es una lista, debería verse así:
---
stuff:
- stuff1: bill
stuff2: sue
Además, la ruta al archivo vars debe comenzar con / desde la raíz de Ansible:
vars_files:
- /vars/blah.yml