這是我的變數列表檔 vars/blah.yml:
---
stuff:
- stuff1: bill
stuff2: sue
我只是想取得變數的值。
這是我的劇本:
hosts: all
become: yes
vars_files:
- vars/blah.yml
tasks:
- name: test
debug:
var: "{{ item.stuff1 }} {{ item.stuff2 }}"
loop :
- "{{ stuff }}"
我收到這個錯誤。
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"}
有人可以告訴我我做錯了什麼嗎?
編輯變數的格式。仍然得到相同的結果。
答案1
長話短說
loop: "{{ stuff }}"
完整故事
與前者相反,仍然廣泛預設使用with_items:
,裸露loop:
不會flatten(level=1)
對傳遞的參數應用自動。
有關此功能的更多信息,您可以查看:
- 專案查找文檔
- 遷移程式
with_items
loop
關於 ansible 循環文檔。
如果您的範例使用的是with_items
with_items:
- "{{ stuff }}"
結果清單仍然與您在文件中定義的清單完全相同。
現在與loop
loop:
- "{{ stuff }}"
您正在循環遍歷看起來像這樣的清單清單(請注意下面範例頂部的單獨破折號以及其餘內容的縮排:這不是拼字錯誤)。
-
- stuff1: bill
stuff2: sue
因此,循環中獲得的第一個元素實際上是 var 檔案中的完整列表。
要解決這個問題,只需將變數正確傳遞給loop
,即
loop: "{{ stuff }}"
答案2
您的變數檔案的格式錯誤。頂層不是列表,它應該如下所示:
---
stuff:
- stuff1: bill
stuff2: sue
此外,vars 檔案的路徑應以 Ansible 根目錄中的 / 開頭:
vars_files:
- /vars/blah.yml