Not sure if it makes a difference but let’s keep the generated config minimal.
		
			
				
	
	
		
			56 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Django/Jinja
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Django/Jinja
		
	
	
	
	
	
| {# Loopback interface must be present so create it here if none is defined in inventory. #}
 | |
| {% if not interfaces | selectattr("name", "==", "lo") %}
 | |
| auto lo
 | |
| iface lo
 | |
| 
 | |
| {% endif -%}
 | |
| 
 | |
| {# Define VRFs. #}
 | |
| {% for vrf in interfaces | selectattr("vrf") | map(attribute="vrf.name") %}
 | |
| auto {{ vrf }}
 | |
| iface {{ vrf }}
 | |
|     pre-up ip link add $IFACE type vrf table {{ 100 + loop.index }}
 | |
|     up ip link set dev $IFACE up
 | |
|     post-down ip link del $IFACE
 | |
| 
 | |
| {% endfor -%}
 | |
| 
 | |
| {# Skip disabled and OOB management interfaces. #}
 | |
| {# For VMs we have to set the attribute manually (to false) so rejectattr works. #}
 | |
| {% for iface in interfaces
 | |
|     | defaultattr('mgmt_only')
 | |
|     | rejectattr('mgmt_only')
 | |
|     | selectattr('enabled') %}
 | |
| auto {{ iface.name }}
 | |
| iface {{ iface.name }}
 | |
| {% if iface.vrf %}
 | |
|     requires {{ iface.vrf.name }}
 | |
|     pre-up ip link set $IFACE master {{ iface.vrf.name }}
 | |
| {% endif %}
 | |
| {% if iface.mtu %}
 | |
|     mtu {{ iface.mtu }}
 | |
| {% endif %}
 | |
| {% for address in iface.ip_addresses %}
 | |
|     address {{ address.address }}
 | |
| {% if address.family.value == 4 %}
 | |
| {% set subnet = address.address | ipaddr('subnet') %}
 | |
| {% set prefix = prefixes | selectattr('prefix', '==', subnet) | first %}
 | |
| {% set gateway = prefix.custom_fields.gateway.address %}
 | |
| {% if gateway is defined and gateway != address.address %}
 | |
| {% if iface.vrf %}
 | |
|     up ip route add default via {{ gateway | ipaddr('address') }} {% if iface.vrf.name %}vrf {{ iface.vrf.name }}{% endif +%}
 | |
| {% else %}
 | |
|     gateway {{ gateway | ipaddr('address') }}
 | |
| {% endif %}
 | |
| {% endif %}
 | |
| {% endif %}
 | |
| {% endfor -%}
 | |
| 
 | |
| {# disable SLAAC if we have a manually set IPv6 address #}
 | |
| {% if iface.ip_addresses | selectattr("family.value", "==", 6) and iface.name != "lo" %}
 | |
|     pre-up echo 0 > /proc/sys/net/ipv6/conf/$IFACE/autoconf
 | |
| {% endif %}
 | |
| 
 | |
| {% endfor -%}
 | |
| 
 | |
| source-directory /etc/network/interfaces.d
 |