내 변수 목록 파일 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
TL;DR
loop: "{{ stuff }}"
전체 이야기
전자가 여전히 기본적으로 널리 사용되는 것과는 반대로 with_items:
, bare는 전달된 인수에 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