遍历任务中的变量,该变量中嵌入了另一个列表

时间:2019-04-11 01:05:20

标签: ansible

我正在寻找一个变量列表。我让它使用with_items遍历变量的变量,但是要注意的是,该变量列表中有一个列表,该列表也需要具有不同的子集/数量,我也需要对其进行迭代。

我尝试了不同的过滤器以包括with_nested,with_subelements和with_items。我知道,随着主要驱动程序的不断前进,它们正朝着循环前进,因此任何解决方案在理想情况下都可以利用向前发展的明智之路。我正在寻找一个“内部”循环或一个外部任务,它将遍历vlans_list并输入该数据作为该点。

组变量

vnic_templates:
   - name: vNIC-A
     fabric: A
     mac_pool: testmac1 
     mtu: 1500 
     org_dn: org-root
     redundancy_type: none 
     state: present
     template_type: initial-template
     vlans_list:          ### THE PROBLEM CHILD
       - name: vlan2
         native: 'no'
         state: present
       - name: vlan3
         native: 'no'
         state: present    

实际任务-当我必须输入多个VLAN时遇到问题。 vnic模板将具有一对一的关系,但是vlans_list对于许多vlan可能是1个vnic_template。

  ucs_vnic_template:
    hostname: "{{ ucs_manager_hostname }}"
    username: "{{ ucs_manager_username }}"
    password: "{{ ucs_manager_password }}"
    name: "{{ item.name }}"
    fabric: "{{ item.fabric }}"
    mac_pool: "{{ item.mac_pool }}"
    mtu: "{{ item.mtu }}"
    org_dn: "{{ item.org_dn }}"
    redundancy_type: "{{ item.redundancy_type }}"
    state: "{{ item.state }}"
    template_type: "{{ item.template_type }}"
    vlans_list: 
     - name: "{{ item.1.name }}"
       native: "{{ item.1.native }}"
       state: "{{ item.1.present }}"  
#    loop: "{{ vnic_templates | subelements('vlans_list') }}"
    with_items:
     - "{{ vnic_templates }}"

我正在开始在此任务之外添加include vlan_list.yml,但对此并不熟悉。

实际结果是

The task includes an option with an undefined variable. The error was: 'item' is undefined\n\n

我需要使用该列表中定义的多个VLAN创建单个vnic模板。

1 个答案:

答案 0 :(得分:0)

与我一起工作的另一位工程师能够解决这个问题。通过布置变量的方式,我们能够轻松地更改代码

更改此:

    vlans_list: 
     - name: "{{ item.1.name }}"
       native: "{{ item.1.native }}"
       state: "{{ item.1.present }}"  

对此:

    vlans_list: "{{ item.vlans_list }}" 

下面列出的完整代码。

- name: Add vNIC Templates
  ucs_vnic_template:
    hostname: "{{ ucs_manager_hostname }}"
    username: "{{ ucs_manager_username }}"
    password: "{{ ucs_manager_password }}"
    name: "{{ item.name }}"
    fabric: "{{ item.fabric }}"
    mac_pool: "{{ item.mac_pool }}"
    mtu: "{{ item.mtu }}"
    org_dn: "{{ item.org_dn }}"
    redundancy_type: "{{ item.redundancy_type }}"
    state: "{{ item.state }}"
    template_type: "{{ item.template_type }}"
    vlans_list: "{{ item.vlans_list }}" 
  with_items:
     - "{{ vnic_templates }}"