在Ansible中构造一个循环

时间:2019-06-05 05:21:30

标签: loops ansible

我正在写一个Ansible角色来建立网络。对于每种类型的接口(以太网,绑定,网桥和VLAN),我创建了一个包含相关数据的变量。 我的想法是,我必须做一个循环来运行列表变量('bridge_ports')中有元素的次数,并且每次通过模板创建一个配置文件。

桥接接口的变量部分如下所示:

my_network__bridge_interface:
    address: "192.168.1.48",
    bootproto: "static",
    bridge_ports:
        - eth0
        - eth1
    device: "br-mgmt",
    ...

为了通过,我尝试了with_subelements循环-但这并不顺利。

- name: Create the network configuration file for the port on the bridge devices
  template:
    src: "{{ ansible_os_family }}.bridge_port.j2"
    dest: "{{ my_network__ifconf_path }}/ifcfg-{{ item.1 }}"
  with_subelements
    - "{{ my_network__bridge_interface }}"
    - bridge_ports
  when: device_conf.type == 'bridge'
  register: my_network__bridge_port_result

运行代码时,错误消息出现:“在迭代项'{}'中找不到'bridge_ports'键”。

我可以看到我以错误的方式使用了with_subelements,但是我真的不知道我原本需要哪种类型的循环。

1 个答案:

答案 0 :(得分:1)

问题出在yml定义上。以下yml起作用:

my_network__bridge_interface:

  - address: "192.168.1.48"
    bootproto: static
    bridge_ports:
      - eth0
      - eth1
    device: br-mgmt   

剧本->

    ---
    - hosts: localhost
      tasks:
        - include_vars: vars.yml
        - debug:
            msg: "{{ item.1 }}"
          with_subelements:
            - "{{ my_network__bridge_interface }}"
            - bridge_ports

输出->

TASK [debug] ****************************************************************************************************************************
ok: [localhost] => (item=[{u'device': u'br-mgmt', u'bootproto': u'static', u'address': u'192.168.1.48'}, u'eth0']) => {
    "msg": "eth0"
}
ok: [localhost] => (item=[{u'device': u'br-mgmt', u'bootproto': u'static', u'address': u'192.168.1.48'}, u'eth1']) => {
    "msg": "eth1"
}