71 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Django/Jinja
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Django/Jinja
		
	
	
	
	
	
{# Virtual gateway IPs for MLAG L2 networks are stored as FHRP groups. #}
 | 
						|
{% set fhrp_assignments = query('netbox.netbox.nb_lookup', 'fhrp-group-assignments', raw_data=true) %}
 | 
						|
{% set fhrp_groups = query('netbox.netbox.nb_lookup', 'fhrp-groups', raw_data=true) -%}
 | 
						|
 | 
						|
{% for iface in interfaces
 | 
						|
        | selectattr('enabled')
 | 
						|
        | rejectattr('name', 'in', ('lo', 'bridge'))
 | 
						|
        | rejectattr('mgmt_only') %}
 | 
						|
auto {{ iface.name }}
 | 
						|
iface {{ iface.name }}
 | 
						|
{# Set VRF and MTU if given. #}
 | 
						|
{% if iface.vrf %}
 | 
						|
    vrf {{ iface.vrf.name }}
 | 
						|
{% endif %}
 | 
						|
{% if iface.mtu %}
 | 
						|
    mtu {{ iface.mtu }}
 | 
						|
{% endif %}
 | 
						|
 | 
						|
{#- Bond/MLAG stuff. #}
 | 
						|
{% if iface.type.value == 'lag' %}
 | 
						|
{% set members = interfaces
 | 
						|
        | selectattr('lag')
 | 
						|
        | selectattr('lag.name', '==', iface.name) %}
 | 
						|
{% if members %}
 | 
						|
    bond-slaves {{ members | map(attribute='name') | join(' ') }}
 | 
						|
{% endif %}
 | 
						|
{% if iface.custom_fields.bond_mode %}
 | 
						|
    bond-mode {{ iface.custom_fields.bond_mode }}
 | 
						|
{% endif %}
 | 
						|
 | 
						|
{#- If the peer has a bond with the same name, generate and set a clag-id for the bond. #}
 | 
						|
{# Don’t set a clag-id for the peerlink (i.e. bond where a member connects to the peer switch). #}
 | 
						|
{% if peer is defined and members | iface_peer | reject('eq', peer) %}
 | 
						|
{% set peer_members = hostvars[peer].interfaces
 | 
						|
        | selectattr('lag')
 | 
						|
        | selectattr('lag.name', '==', iface.name) %}
 | 
						|
    clag-id {{ (members + peer_members) | cl_clag_id }}
 | 
						|
{% endif %}
 | 
						|
{% endif %}
 | 
						|
 | 
						|
{#- Set allowed VLANs if we are part of the bridge. #}
 | 
						|
{% if iface.bridge and iface.mode %}
 | 
						|
{% if iface.mode.value == 'access' and iface.untagged_vlan %}
 | 
						|
    bridge-access {{ iface.untagged_vlan.vid }}
 | 
						|
{% elif iface.mode.value == 'tagged' and iface.tagged_vlans %}
 | 
						|
    bridge-vids {{ iface.tagged_vlans | map(attribute='vid') | join(' ') }}
 | 
						|
{% endif %}
 | 
						|
{% endif %}
 | 
						|
 | 
						|
{#- Addresses. #}
 | 
						|
{% for addr in iface.ip_addresses %}
 | 
						|
    address {{ addr.address }}
 | 
						|
{% endfor %}
 | 
						|
 | 
						|
{#- MLAG virtual address. #}
 | 
						|
{% if iface.count_fhrp_groups > 0 %}
 | 
						|
{% set fhrp_assignment = fhrp_assignments | selectattr('interface.id', '==', iface.id) | first %}
 | 
						|
{% set fhrp_group = fhrp_groups | selectattr('id', '==', fhrp_assignment.group.id) | first %}
 | 
						|
    address-virtual 00:00:5e:00:01:01 {{
 | 
						|
        fhrp_group.ip_addresses
 | 
						|
                | sort(attribute='family.value')
 | 
						|
                | map(attribute='address')
 | 
						|
                | join(' ') }}
 | 
						|
 | 
						|
{#- Enable directed broadcast forwarding on this interface for WoL if requested. +#}
 | 
						|
{% if iface.name in ifaces_directed_broadcast | default([]) %}
 | 
						|
    post-up echo 1 > /proc/sys/net/ipv4/conf/{{ iface.name | replace('.', '-') }}-v0/bc_forwarding
 | 
						|
{% endif %}
 | 
						|
{% endif %}
 | 
						|
 | 
						|
{%+ endfor %}
 |