我有以下问题:
当我使用变量with_subelements时,我有一个错误:错误!子元素查找需要一本字典,得到了 '
我的主人档案:
[incor]
127.0.0.1
dir group_vars
group_vars
--- all
--- incor
--- main.yml
group_vars / INCOR / main.yml
---
incor:
- pfileurl: "http://domain/file1.jar"
pfilename: "user1.jar"
pfiletype: "lib"
pfileset:
- {type: "type1", reg: "reg1" }
- {type: "type2", reg: "reg2" }
- pfileurl: "http://domain/file2.jar"
pfilename: "user2.jar"
pfiletype: "lib"
pfileset:
- {type: "type1", reg: "reg1" }
- {type: "type2", reg: "reg2" }
角色/ p_get_file /任务/ main.yml
- name: Download files
get_url:
url="{{ item.0.pfileurl }}"
dest="{{ path }}{{ item.1.type }}/{{ item.1.reg }}/{{ item.0.pfilename }}"
force="yes"
with_subelements:
- "{{ projectname }}"
- "pfileset"
when: "'item.0.pfiletype is defined' and item.0.pfiletype == 'lib'"
delegate_to: "127.0.0.1"
myplaybook.yml
- hosts: "{{ hosts }}"
roles:
- { role: p_get_file }
启动剧本
ansible-playbook myplaybook.yml --extra-vars "hosts='incor' projectname='incor'"
Ansible 1.9.4中的变量{{projectname}}出现问题,但是 在Ansible 2.2.1.0中不起作用:错误!子元素查找需要一个字典,得到' incor'
答案 0 :(得分:1)
自Ansible 2.2以来,您无法使用裸变量。
在1.9中它起作用,因为这种语法是可以接受的:
with_subelements:
- incor
- pfileset
2.2+ incor
被视为字符串。
解决此问题的最简单方法是将incor
dict包装到某些顶级词典中,如projects
:
---
projects:
incor:
- pfileurl: "http://domain/file1.jar"
pfilename: "user1.jar"
pfiletype: "lib"
pfileset:
- {type: "type1", reg: "reg1" }
- {type: "type2", reg: "reg2" }
...
然后像这样访问它:
with_subelements:
- "{{ projects[projectname] }}"
- pfileset
或者您可以jump trough some hoops访问根级变量。
答案 1 :(得分:0)
我尝试使用jump trough some hoops {{ vars[projectname] }}
但变量incor
原始
incor:
- pfileurl: "http://domain/{{ projectname }}/file1.jar"
pfilename: "user1.jar"
pfiletype: "lib"
pfileset:
- {type: "type1", reg: "reg1" }
- {type: "type2", reg: "reg2" }
{{ projectname }}
中的变量pfileurl
没有对象