Ansible教科书with_subelements

时间:2015-09-19 16:01:35

标签: ansible ansible-playbook

Ansible playbook with_subelements错误3级。

我的配置看起来像

---
Firstlevel:
    - fl_number: fln1
      fl_data: fld1

      Secondlevel:
      - sl_number: sln_f1_1
        sl_data: sld_f1_1
        Thirdlevel:
        - tl_number: tln_s1_f1_1
          tl_data: tld_s1_f1_1
        - tl_number: tln_s2_f1_2
          tl_data: tld_s2_f1_2

Ansible剧本

>cat test_threelevels.yml
---
 - hosts: localhost
   gather_facts: no
   vars_files:
      - ../vars/testConfig-var.yml


tasks:

    - name: DebugWorks
      debug: msg="{{ item.1.Thirdlevel }}"
      with_subelements:
      - Firstlevel
      - Secondlevel

    - name: DebugDoesNotWork
      debug: msg=" Sub element Thirdlevel test"
      with_subelements:
      - Firstlevel
      - Secondlevel
      - Thirdlevel

执行时     ansible-playbook -v test_threelevels.yml

任务" DebugWorks"但是任务" DebugDoesNotWork" dosent。

输出     任务:[DebugDoesNotWork] ********************************************* *********     致命的:[localhost] =>子元素查找需要两个项目的列表,首先是字典或列表,第二个是字符串

FATAL: all hosts have already failed -- aborting

PLAY RECAP ********************************************************************

需要帮助了解这是否是正确的方法以及为什么它不起作用。

对任何建议持开放态度。

感谢。

1 个答案:

答案 0 :(得分:1)

错误描述至少模糊地说明了什么意思。 :)

Refer to the code在这里看到错误的含义。 terms是您传递的列表。

        if not isinstance(terms, list) or not 2 <= len(terms) <= 3:

简而言之:你只能走2级而不是3级。

The documentation确实说清楚了:

  

或者,您可以将第三个元素添加到子元素列表中   拿着旗帜字典。