# # /etc/network/interfaces (Salt managed) # {%- set node_config = salt['pillar.get']('nodes:' ~ grains['id'], {}) %} {%- set node_id = grains['id'] %} {%- set sites_config = salt['pillar.get']('sites', {}) %} #source /etc/network/interfaces.d/* {# # Configure any secondary IPs / router_id / infra-srv IPs on loopback, if present #} {%- set lo_prefixes = salt['pillar.get']('nodes:' ~ grains['id'] ~ ':ifaces:lo:prefixes', []) %} {#- Add user/infra-srv VPN IPs, too #} {%- for vpn in ['user-srv', 'infra-srv'] %} {#- COMPATIBILITY GLUE #} {%- for prefix in salt['pillar.get']("tinc:" ~ vpn ~ ":" ~ grains['nodename'] ~ ":subnet", []) %} {%- do lo_prefixes.append (prefix) %} {%- endfor %} {%- for prefix in salt['pillar.get']("tinc:" ~ vpn ~ ":" ~ grains['id'] ~ ":subnet", []) %} {%- do lo_prefixes.append (prefix) %} {%- endfor %} {%- endfor %} # The loopback network interface auto lo iface lo {%- for prefix in lo_prefixes %} {%- set mask = '128' if ':' in prefix else '32' %} {%- set prefix = prefix if '/' in prefix else prefix ~ '/' ~ mask %} address {{ prefix }} {%- endfor %} {# # Special static config for this node? {%- set host_config_file = "network/interfaces/hosts/" ~ node_id ~ ".cfg" %} {%- include host_config_file ignore missing %} #} {# # Set up ifaces dict with configured and generated interfaces. #} {%- set ifaces = salt['ffho_net.get_interface_config'](node_config, sites_config) %} {%- for interface in ifaces|sort if interface not in ['lo'] %} {%- set config = ifaces.get (interface) %} {#- Let's go #} # {{ config.get ('desc', interface) }} {%- if config.get ('auto', True) == True %} auto {{ interface }} {%- endif %} {%- if 'method' in config %} iface {{ interface }} inet {{ config.get ('method') }} {%- else %} iface {{ interface }} {%- endif %} {#- Configure stuff for bonding, bridging, etc.? #} {%- for feature in ['batman', 'bond', 'bridge', 'vlan', 'vxlan'] if feature in config %} {%- set feature_config = config.get (feature) %} {%- for opt in feature_config|sort %} {{ opt }} {{ feature_config.get (opt) }} {%- endfor %} # {%- endfor %} {#- Configure IP addresses #} {%- for prefix in config.get ('prefixes', []) %} address {{ prefix }} {%- endfor %} {#- Anything else... #} {%- for keyword in config|sort %} {%- set argument = config.get (keyword) %} {%- if argument is none %} {%- elif keyword.startswith ("_") %} {%- elif keyword in [ 'auto', 'batman', 'bond', 'bridge', 'method', 'vlan', 'vxlan', 'desc', 'prefixes' ] %} {%- elif argument is string or argument is number %} {{ keyword }} {{ argument }} {%- else %} {%- for item in argument %} {{ keyword }} {{ item }} {%- endfor %} {%- endif %} {%- endfor %} {% endfor %} {#- # OpenVPN VPNs (if any) #} {%- include "network/interfaces/openvpn.tmpl" %} {#- # Tinc VPNs (if any) #} {#%- include "network/interfaces/tinc.tmpl" %#}