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