2016-12-16 4 views
0

Playbook:анзибль - Multiple словарь Файлы

--- 
- 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}}' 

Variable файл: ./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, я могу использовать только одну переменную словаря (ab351E) из with_item.

Как отредактировать шаблон Jinja2 так, чтобы я мог использовать как переменные словаря (ab351E & ab361E), упомянутые в playbook под with_item?

Моя цель состоит в том, чтобы сгенерировать 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 CONFIG 
    template: 
    src: ./templates/accessvlan.j2 
    dest: ./output/{{ item.switch }}.conf 

И в вашем PlayBook:

- name: generate all configs 
    include: generate_config.yml 
    with_items: 
    . . .