这是我的变量列表文件 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