我正在写一个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,但是我真的不知道我原本需要哪种类型的循环。
答案 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"
}