Hier ist meine Variablenlistendatei vars/blah.yml:
---
stuff:
- stuff1: bill
stuff2: sue
Ich versuche nur, die Werte der Variablen zu erhalten.
Hier ist mein Spielbuch:
hosts: all
become: yes
vars_files:
- vars/blah.yml
tasks:
- name: test
debug:
var: "{{ item.stuff1 }} {{ item.stuff2 }}"
loop :
- "{{ stuff }}"
Ich erhalte diesen Fehler.
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"}
Kann mir jemand sagen, was ich falsch mache?
Habe die Formatierung der Variablen bearbeitet. Erhalte immer noch die gleichen Ergebnisse.
Antwort1
Kurz zusammengefasst
loop: "{{ stuff }}"
Ganze Geschichte
Im Gegensatz zum früheren und immer noch weit verbreiteten Standard wendet with_items:
ein Bare loop:
keine Automatik flatten(level=1)
auf die übergebenen Argumente an.
Weitere Informationen zu dieser Funktion finden Sie unter:
- die Artikelsuche-Dokumentation
- das
with_items
Migrationsverfahrenloop
in der Ansible-Loops-Dokumentation.
Wenn Ihr Beispiel die Verwendungwith_items
with_items:
- "{{ stuff }}"
Die resultierende Liste wäre immer noch genau die, die Sie in Ihrer Datei definiert haben.
Jetzt verwendet mitloop
loop:
- "{{ stuff }}"
Sie durchlaufen eine Liste von Listen, die so aussieht (beachten Sie den einzelnen Bindestrich oben im folgenden Beispiel und die Einrückung des restlichen Inhalts: Es handelt sich nicht um einen Tippfehler).
-
- stuff1: bill
stuff2: sue
Das erste Element, das Sie in Ihrer Schleife erhalten, ist also tatsächlich Ihre vollständige Liste in Ihrer Var-Datei.
Um das zu beheben, übergeben Sie die Variable einfach korrekt an loop
, d. h.
loop: "{{ stuff }}"
Antwort2
Das Format Ihrer Variablendatei ist falsch. Die oberste Ebene ist keine Liste, sie sollte so aussehen:
---
stuff:
- stuff1: bill
stuff2: sue
Darüber hinaus sollte der Pfad zur Vars-Datei mit einem / vom Ansible-Stammverzeichnis aus beginnen:
vars_files:
- /vars/blah.yml