剧本:
---
- hosts: switch
connection: local
gather_facts: no
tasks:
- name: GET DATA
include_vars: ./host_vars/file.yml
- name: GENERATE CONFIG
template:
src: ./templates/accessvlan.j2
dest: ./output/{{ item.switch }}.conf
with_items:
- '{{ab351E}}'
- '{{ab361E}}'
变量文件:./host_vars/file.yml
---
ab351E:
- { switch: ab35-1E, port: Gi1/14, vlan: 1310 }
- { switch: ab35-1E, port: Gi1/29, vlan: 1382 }
- { switch: ab35-1E, port: Gi1/15, vlan: 1310 }
ab361E:
- { switch: ab36-1E, port: Gi1/15, vlan: 1410 }
- { switch: ab36-1E, port: Gi1/26, vlan: 1482 }
- { switch: ab36-1E, port: Gi1/17, vlan: 1410 }
Jinja2模板:/templates/accessvlan.j2
conf t
{% for host in ab351E %}
int {{ host.port }}
switchport access vlan {{ host.vlan }}
{% endfor %}
end
copy run start
我可以使上面的剧本没有问题。但是,如Jinja2模板中所示,我只能使用with_item
中的一个字典变量(ab351E)。
如何编辑我的Jinja2模板,以便我可以使用with_item
下的剧本中提到的字典变量(ab351E& ab361E)?
我的目标是生成2个配置文件:ab35-1E.conf& ab36-1E.conf。
ab35-1E.conf 文件如下所示:
conf t
int G1/14
switchport access vlan 1310
int G1/29
switchport access vlan 1382
int G1/15
switchport access vlan 1310
end
copy run start
答案 0 :(得分:0)
我认为您可以使用include
将项目传递给模板,以获得您想要的行为:
conf t
{% for host in item %}
int {{ host.port }}
switchport access vlan {{ host.vlan }}
{% endfor %}
end
copy run start
和
将此块移动到名为' generate_config.yml'
的文件中- name: GENERATE CONFIG
template:
src: ./templates/accessvlan.j2
dest: ./output/{{ item.switch }}.conf
在你的剧本中:
- name: generate all configs
include: generate_config.yml
with_items:
. . .