長話短說

長話短說

這是我的變數列表檔 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

  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

相關內容