2016-12-16 16 views
0

脚本:Ansible - 複数の辞書ファイル

--- 
- 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)は1つしか使用できません。

with_itemの下の演奏帳で参照されている辞書変数(ab351E & ab361E)を両方使用できるように、私のJinja2テンプレートを編集するにはどうすればよいですか?

私の目標は、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

私はあなたがちょうどあなたが希望の動作を取得するために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 all configs 
    include: generate_config.yml 
    with_items: 
    . . . 
- name: GENERATE CONFIG 
    template: 
    src: ./templates/accessvlan.j2 
    dest: ./output/{{ item.switch }}.conf 

そして、あなたの脚本で

関連する問題