27 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Django/Jinja
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Django/Jinja
		
	
	
	
	
	
{# Note that there must be exactly one VLAN-aware bridge. #}
 | 
						|
{% set bridge = interfaces
 | 
						|
        | selectattr('type') | selectattr('type.value', '==', 'bridge')
 | 
						|
        | first %}
 | 
						|
{% set ports = interfaces
 | 
						|
        | selectattr('bridge') | selectattr('bridge.name', '==', bridge.name)
 | 
						|
        | selectattr('enabled') %}
 | 
						|
 | 
						|
{#- Allowed VLANs can be specified on the bridge, any of its ports, or all VLANs in NetBox. #}
 | 
						|
{% set my_vlans = bridge.tagged_vlans or vlans %}
 | 
						|
{% set my_vlan_ids = my_vlans | map(attribute='vid') | sort -%}
 | 
						|
 | 
						|
auto {{ bridge.name }}
 | 
						|
iface {{ bridge.name }}
 | 
						|
    bridge-ports {{ ports | map(attribute='name') | join(' ') }}{% if my_vlans %} vxlan{% endif +%}
 | 
						|
    bridge-vlan-aware yes
 | 
						|
    bridge-pvid {{ bridge.untagged_vlan | default(1, true) }}
 | 
						|
{% if bridge.mode.value == 'tagged' and my_vlans %}
 | 
						|
    bridge-vids {{ my_vlan_ids | join(' ') }}
 | 
						|
{% endif %}
 | 
						|
 | 
						|
{% if my_vlans %}
 | 
						|
auto vxlan
 | 
						|
iface vxlan
 | 
						|
    bridge-vlan-vni-map {{ my_vlan_ids | zip(my_vlan_ids) | map('join', '=') | join(' ') }}
 | 
						|
    bridge-learning off
 | 
						|
{% endif %}
 |