Ansible - Jinja2

Ansible - Jinja2

Jinja2
Jinja2 er en templating engine som brukes i Ansible.
Det gjør det veldig lett å lage dynamiske eller statisk konfigurasjonsfil for IOS enheter.
Vi bygger videre på rolle eksempelet fra tidligere.
Vi oppretter en fil som heter vlan.j2 i templates mappen også importere vi denne tasken i main.yml filen.
mkdir roles/collapsed_core/templates
nano roles/collapsed_core/templates/vlan.j2
vlan.js2:


vtp domain none
vtp mode off
vlan 301
 name vlan301
vlan 302
 name vlan302
vlan 303
 name vlan303


nano roles/collapsed_core/tasks/vlan.yaml

---
   - name: Opprett vlan med jinja2
     ios_config:
        src: "vlan.j2"
        match: line

                 

nano roles/collapsed_core/tasks/main.yaml

---
  - name: Ping gateway
    ios_ping:
      dest: 10.170.0.1
      count: 1

  - name: Aktiver LLDP
    import_tasks: lldp.yaml
    tags: lldp

  - name: Opprett vlan
    import_tasks: vlan.yaml
    tags: vlan
                 
                                  

Vi kjører playbooken og legger til taggen vlan:
Da kjører vi kun tasken som har taggen vlan.
ansible-playbook playbook_rolle_collapsed_core.yaml -k --t vlan
PLAY [playbook_rolle_collapsed_core] ***************************************************************************************************************************************************************************************************

TASK [collapsed_core : Opprett vlan med jinja2] ****************************************************************************************************************************************************************************************
changed: [IOS_XE_switch_3]
changed: [IOS_XE_switch_4]

PLAY RECAP *****************************************************************************************************************************************************************************************************************************
IOS_XE_switch_3            : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
IOS_XE_switch_4            : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
                                    

For å gjøre det enda mer dynamisk kan vi legge til variabler i playbooken vår.
Vi oppretter en fil som heter collapsed_core.yaml i group_vars mappen vår.
Her legger vi til variabler som vlan_id og vlan_name.
nano group_vars/collapsed_core.yaml
---
vlan:
  - vlan_id: 304
    vlan_name: vlan304
  - vlan_id: 305
    vlan_name: vlan305
  - vlan_id: 306
    vlan_name: vlan306
                                    

Vi endrer vlan.j2 filen vår til å bruke variablene vi har lagt til.
nano roles/collapsed_core/templates/vlan.j2
vtp domain none
vtp mode off
{% for v in vlan %}
vlan {{ v.vlan_id }}
    name {{ v.vlan_name }}
{% endfor %}
                                    

ansible-playbook playbook_rolle_collapsed_core.yaml -k -t vlan 
SSH password: 

PLAY [playbook_rolle_collapsed_core] ***************************************************************************************************************************************************************************************************

TASK [collapsed_core : Opprett vlan med jinja2] ****************************************************************************************************************************************************************************************
changed: [IOS_XE_switch_3]
changed: [IOS_XE_switch_4]

PLAY RECAP *****************************************************************************************************************************************************************************************************************************
IOS_XE_switch_3            : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
IOS_XE_switch_4            : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0