File: //lib/python3.9/site-packages/ansible_collections/dellemc/os6/roles/os6_vlan/templates/os6_vlan.j2
#jinja2: trim_blocks: True,lstrip_blocks: True
{#########################################
Purpose:
Configure VLAN Interface commands for os6 Devices
os6_vlan:
tagged_members_append: False
tagged_members_state: present
vlan 2:
name: "os6vlan"
tagged_members:
- port: Gi1/0/1
state: present
- port: Gi1/0/2
state: absent
untagged_members:
- port: Gi1/0/3
state: present
- port: Gi1/0/4
state: absent
state: present
#########################################}
{% if os6_vlan is defined and os6_vlan -%}
{%- for key in os6_vlan.keys() -%}
{% if 'vlan' in key %}
{%- set vlan_id = key.split(" ") -%}
{%- set vlan_vars = os6_vlan[key] -%}
{% if vlan_vars.state is defined and vlan_vars.state=="absent" -%}
no vlan {{ vlan_id[1] }}
{%- else -%}
vlan {{ vlan_id[1] }}
{% if vlan_vars.name is defined -%}
{% if vlan_vars.name-%}
name "{{ vlan_vars.name }}"
{% else -%}
no name
{% endif %}
{% endif %}
exit
{% if vlan_vars.untagged_members is defined -%}
{%- for ports in vlan_vars.untagged_members -%}
{% if ports.port is defined and ports.port -%}
{% if ports.state is defined and ports.state == "absent" -%}
interface {{ ports.port }}
no switchport access vlan
{% else -%}
interface {{ ports.port }}
switchport access vlan {{ vlan_id[1] }}
{% endif -%}
{% endif -%}
exit
{% endfor -%}
{% endif -%}
{% endif -%}
{% endif -%}
{% endfor -%}
{%- set cmd_dict = {} -%}
{%- for key in os6_vlan.keys() -%}
{% if 'vlan' in key %}
{%- set vlan_id = key.split(" ") -%}
{%- set vlan_vars = os6_vlan[key] -%}
{%- set tagged_vlans = [] -%}
{%- set tagged_members_present = [] -%}
{%- set tagged_members_absent= [] -%}
{% if vlan_vars.tagged_members is defined and vlan_vars.tagged_members -%}
{%- for ports in vlan_vars.tagged_members -%}
{% if ports.port is defined and ports.port -%}
{%- set port = ports.port -%}
{% if ports.state is defined and ports.state == 'absent' -%}
{% if port in cmd_dict and 'absent' in cmd_dict[port] -%}
{%- set tmp_vlan_list=cmd_dict[port]['absent'] -%}
{%- set x=tmp_vlan_list.extend([vlan_id[1]]) -%}
{%- set x=cmd_dict[port].update({'absent': tmp_vlan_list}) -%}
{%- elif port in cmd_dict and 'absent' not in cmd_dict[port] -%}
{%- set x=cmd_dict[port].update({'absent': [vlan_id[1]]}) -%}
{%- else -%}
{%- set x=cmd_dict.update({port: {'absent': [vlan_id[1]]}}) -%}
{% endif -%}
{%- else -%}
{% if port in cmd_dict and 'present' in cmd_dict[port] -%}
{%- set tmp_vlan_list=cmd_dict[port]['present'] -%}
{%- set x=tmp_vlan_list.extend([vlan_id[1]]) -%}
{%- set x=cmd_dict[port].update({'present': tmp_vlan_list}) -%}
{%- elif port in cmd_dict and 'present' not in cmd_dict[port] -%}
{%- set x=cmd_dict[port].update({'present': [vlan_id[1]]}) -%}
{%- else -%}
{%- set x=cmd_dict.update({port: {'present': [vlan_id[1]]}}) -%}
{% endif -%}
{% endif -%}
{% endif -%}
{% endfor -%}
{% endif -%}
{% endif -%}
{% endfor -%}
{%- for cmd in cmd_dict -%}
interface {{cmd}}
{% if 'tagged_members_state' in os6_vlan and os6_vlan['tagged_members_state']=='absent' %}
no switchport trunk allowed vlan
{% else %}
{% for cmd_item in cmd_dict[cmd] %}
{% if 'present' == cmd_item -%}
{% set sort_list = cmd_dict[cmd]['present']| sort %}
{% elif 'absent' in cmd_item -%}
{% set sort_list = cmd_dict[cmd]['absent']| sort %}
{% endif %}
{% set range_list = [] %}
{% set temp = {'temp': []} %}
{% for i in range(sort_list|length) %}
{% set x=temp['temp'].extend([sort_list[i]]) %}
{% if (i != sort_list|length -1 and sort_list[i+1]|int - sort_list[i]|int > 1) or (i == sort_list|length -1) %}
{% if temp['temp']|first != temp['temp']|last %}
{% set x=range_list.extend([temp['temp']|first|string+'-'+temp['temp']|last|string]) %}
{% set x=temp.update({'temp': []}) %}
{% else %}
{% set x=range_list.extend([temp['temp']|last|string]) %}
{% set x=temp.update({'temp': []}) %}
{% endif %}
{% endif %}
{% endfor %}
{% if 'present' == cmd_item -%}
{% if 'tagged_members_append' in os6_vlan and os6_vlan['tagged_members_append'] %}
switchport trunk allowed vlan add {{ range_list| join(',') }}
{% else %}
switchport trunk allowed vlan {{ range_list| join(',') }}
{% endif -%}
{% elif 'absent' == cmd_item -%}
switchport trunk allowed vlan remove {{ range_list| join(',') }}
{% endif -%}
{% endfor -%}
exit
{% endif -%}
{% endfor -%}
{% endif -%}