変数リスト ファイル 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:
、 bare は渡された引数にloop:
自動的に適用されません。flatten(level=1)
この機能の詳細については、以下を参照してください。
- アイテム検索ドキュメント
with_items
移行手順loop
Ansible ループのドキュメントについて。
もしあなたの例がwith_items
with_items:
- "{{ stuff }}"
結果のリストは、ファイルで定義したものとまったく同じになります。
現在使用されているloop
loop:
- "{{ stuff }}"
次のようなリストのリストに対してループ処理を行っています (以下の例の先頭のダッシュ 1 つと、残りのコンテンツのインデントに注意してください。これはタイプミスではありません)。
-
- stuff1: bill
stuff2: sue
したがって、ループで取得する最初の要素は、実際には var ファイル内の完全なリストです。
これを修正するには、変数を正しく渡すだけですloop
。つまり、
loop: "{{ stuff }}"
答え2
変数ファイルの形式が間違っています。最上位レベルはリストではなく、次のようになっている必要があります。
---
stuff:
- stuff1: bill
stuff2: sue
さらに、vars ファイルへのパスは、Ansible ルートからの / で始まる必要があります。
vars_files:
- /vars/blah.yml