Ansible 2.2.1.0带_子元素:错误!子元素查找需要一个字典,得到'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

我有以下问题: 当我使用带有_子元素的变量时,我有一个错误: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"
    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" }