{%- from "linux/map.jinja" import network with context %} {%- from "linux/map.jinja" import system with context %} {%- if network.enabled %} {%- macro set_param(param_name, param_dict) -%} {%- if param_dict.get(param_name, False) -%} - {{ param_name }}: {{ param_dict[param_name] }} {%- endif -%} {%- endmacro -%} {%- if network.bridge != 'none' %} linux_network_bridge_pkgs: pkg.installed: {%- if network.bridge == 'openvswitch' %} - names: {{ network.ovs_pkgs }} {%- else %} - names: {{ network.bridge_pkgs }} {%- endif %} {%- endif %} {%- if not network.network_manager %} {# TODO stop/disable/uninstall network manager #} {%- for interface_name, interface in network.interface.iteritems() %} {%- if interface.get('managed', True) %} {%- if grains.os_family in ['RedHat', 'Debian'] %} {%- if interface.type == 'bridge' and network.bridge == 'openvswitch' %} linux_interface_{{ interface_name }}: network.managed: - enabled: {{ interface.enabled }} - name: {{ interface_name }} - type: eth {%- if interface.address is defined %} - proto: {{ interface.get('proto', 'static') }} - ipaddr: {{ interface.address }} - netmask: {{ interface.netmask }} {%- else %} - proto: {{ interface.get('proto', 'dhcp') }} {%- endif %} {%- if interface.name_servers is defined %} - dns: {{ interface.name_servers }} {%- endif %} {%- for param in network.interface_params %} {{ set_param(param, interface) }} {%- endfor %} {%- if interface.wireless is defined and grains.os_family == 'Debian' %} {%- if interface.wireless.security == "wpa" %} - wpa-ssid: {{ interface.wireless.essid }} - wpa-psk: {{ interface.wireless.key }} {%- else %} - wireless-ssid: {{ interface.wireless.essid }} - wireless-psk: {{ interface.wireless.key }} {%- endif %} {%- endif %} - require: - pkg: linux_network_bridge_pkgs {%- for network in interface.use_interfaces %} - network: linux_interface_{{ network }} {%- endfor %} linux_ovs_bridge_{{ interface_name }}: cmd.run: - name: ovs-vsctl add-br {{ interface_name }} - unless: ovs-vsctl show | grep 'Bridge {{ interface_name }}' - require: - network: linux_interface_{{ interface_name }} {%- for port in interface.use_interfaces %} linux_ovs_bridge_{{ interface_name }}_port_{{ port }}: cmd.run: - name: ovs-vsctl add-port {{ interface_name }} {{ port }} - unless: ovs-vsctl show | grep 'Interface "{{ interface_name }}"' - require: - cmd: linux_ovs_bridge_{{ interface_name }} {%- endfor %} {%- else %} linux_interface_{{ interface_name }}: network.managed: - enabled: {{ interface.enabled }} - name: {{ interface_name }} - type: {{ interface.type }} {%- if interface.address is defined %} - proto: {{ interface.get('proto', 'static') }} - ipaddr: {{ interface.address }} - netmask: {{ interface.netmask }} {%- else %} - proto: {{ interface.get('proto', 'dhcp') }} {%- endif %} {%- if interface.name_servers is defined %} - dns: {{ interface.name_servers }} {%- endif %} {%- if interface.wireless is defined and grains.os_family == 'Debian' %} {%- if interface.wireless.security == "wpa" %} - wpa-ssid: {{ interface.wireless.essid }} - wpa-psk: {{ interface.wireless.key }} {%- else %} - wireless-ssid: {{ interface.wireless.essid }} - wireless-psk: {{ interface.wireless.key }} {%- endif %} {%- endif %} {%- for param in network.interface_params %} {{ set_param(param, interface) }} {%- endfor %} {%- if interface.type == 'bridge' %} - bridge: {{ interface_name }} - delay: 0 - bypassfirewall: True - use: {%- for network in interface.use_interfaces %} - network: {{ network }} {%- endfor %} - ports: {% for network in interface.use_interfaces %}{{ network }} {% endfor %} - require: {%- for network in interface.use_interfaces %} - network: linux_interface_{{ network }} {%- endfor %} {%- endif %} {%- if interface.gateway is defined %} linux_system_network: network.system: - enabled: {{ interface.enabled }} - hostname: {{ network.fqdn }} {%- if interface.gateway is defined %} - gateway: {{ interface.gateway }} - gatewaydev: {{ interface_name }} {%- endif %} - nozeroconf: True - nisdomain: {{ system.domain }} - require_reboot: False {%- endif %} {%- endif %} {%- endif %} {%- if interface.wireless is defined %} {%- if grains.os_family == 'Arch' %} linux_network_packages: pkg.installed: - names: {{ network.pkgs }} /etc/netctl/network_{{ interface.wireless.essid }}: file.managed: - source: salt://linux/files/wireless - mode: 755 - template: jinja - require: - pkg: linux_network_packages - defaults: interface_name: {{ interface_name }} switch_profile_{{ interface.wireless.essid }}: cmd.run: - name: netctl switch-to network_{{ interface.wireless.essid }} - cwd: /root - unless: "iwconfig {{ interface_name }} | grep -e 'ESSID:\"{{ interface.wireless.essid }}\"'" - require: - file: /etc/netctl/network_{{ interface.wireless.essid }} enable_profile_{{ interface.wireless.essid }}: cmd.run: - name: netctl enable network_{{ interface.wireless.essid }} - cwd: /root - unless: test -e /etc/systemd/system/multi-user.target.wants/netctl@network_{{ interface.wireless.essid }}.service - require: - file: /etc/netctl/network_{{ interface.wireless.essid }} {%- endif %} {%- endif %} {%- endif %} {%- if interface.route is defined %} linux_network_{{ interface_name }}_routes: network.routes: - name: {{ interface_name }} - routes: {%- for route_name, route in interface.route.iteritems() %} - name: {{ route_name }} ipaddr: {{ route.address }} netmask: {{ route.netmask }} gateway: {{ route.gateway }} {%- endfor %} {%- endif %} {%- endfor %} {%- endif %} {%- endif %}