Ansible 2.2.1.0带_子元素:错误!子元素查找需要一个字典,得到'incor'
我有以下问题: 当我使用带有_子元素的变量时,我有一个错误:error!子元素查找需要一个字典,得到'incor' 我的主机文件:Ansible 2.2.1.0带_子元素:错误!子元素查找需要一个字典,得到'incor',ansible,ansible-2.x,Ansible,Ansible 2.x,我有以下问题: 当我使用带有_子元素的变量时,我有一个错误:error!子元素查找需要一个字典,得到'incor' 我的主机文件: [incor] 127.0.0.1 迪尔集团 group_vars --- all --- incor --- main.yml 组变量/incor/main.yml --- incor: - pfileurl: "http://domain/file1.jar" pfilename: "user1.jar" p
[incor]
127.0.0.1
迪尔集团
group_vars
--- all
--- incor
--- main.yml
组变量/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_文件/tasks/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”因为Ansible 2.2,所以不能使用裸变量 在1.9中,它可以工作,因为这种语法是可以接受的:
with_subelements:
- incor
- pfileset
在2.2中,incor被视为字符串
解决此问题的最简单方法是将incor dict打包到一些顶级字典式项目中:
然后像这样访问它:
with_subelements:
- "{{ projects[projectname] }}"
- pfileset
或者您可以访问根级别的变量。我尝试使用{{vars[projectname]}},但变量不包含在原始变量中
变量{{projectname}在没有对象的pfileurl中但现在是Ansible 2.2,可以看到所有目录中的所有变量,不仅是global_vars/incor/main.yml`global_vars/-incor/-main.yml-outcor/-main.yml`而且只记得lastNow我不能在global_vars/incor/main.yml和global_vars/outcor/main.ymlYou中使用变量项目可能需要更改hash_Behavior设置以合并项目目录,但一般不建议这样做或修改变量布局。我尝试使用{{vars[projectname]},但vaeiables incor raw incor:-pfileurl:http://domain/{{projectname}/file1.jar pfilename:user1.jar pfiletype:lib pfileset:-{type:type1,reg:reg1}-{type:type2,reg:reg2}变量{{{projectname}}在pfileurl中,不带对象
with_subelements:
- "{{ projects[projectname] }}"
- pfileset
incor:
- pfileurl: "http://domain/{{ projectname }}/file1.jar"
pfilename: "user1.jar"
pfiletype: "lib"
pfileset:
- {type: "type1", reg: "reg1" }
- {type: "type2", reg: "reg2" }