diff --git a/templates/interface/defaults/main.yml b/templates/interface/defaults/main.yml index 0910da5b26381303fbc25deb652f190995339756..fb4accb9b2096b7093495d88311f521a3e0e10a0 100644 --- a/templates/interface/defaults/main.yml +++ b/templates/interface/defaults/main.yml @@ -2,39 +2,49 @@ interface_default_file: /etc/network/interfaces interface_directory: '{{ interface_default_file }}.d' interface_file_name: -interface_file: ' +interface_file: >- {%- if interface_file_name is defined and interface_file_name -%} {{ interface_directory }}/{{ interface_file_name }} {%- else -%} {{ interface_default_file }} - {%- endif %}' + {%- endif -%} interface_clean: True -interface_mtu: 1442 -interface_ip: -interface_mac: -interface_name: +interface_identification: +interface_name: >- + {%- import "roles/common/templates/network.j2" as network with context -%} + {%- if interface_identification in ansible_interfaces -%} + {{ interface_identification }} + {%- elif interface_identification | ipv4 -%} + {{ network.ip_to_interface(interface_identification) }} + {%- elif interface_identification | regex_search("^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$")-%} + {{ network.mac_to_interface(interface_identification) }} + {%- else -%} + "" + {%- endif -%} +interface_configuration_type: dhcp + +interface_static_ip: +interface_static_netmask: + +interface_mtu: 1442 interface_default_gateway: interface_routes: [] # - gateway: # network: -# mask: +# netmask: -interface_device: ' - {%- import "roles/common/templates/network.j2" as network with context -%} - {%- if interface_ip is defined and interface_ip -%} - {{ network.ip_to_interface(interface_ip) | default("") }} +interface_sanity_check_msg: >- + {%- if not interface_identification -%} + interface_identification is not set, + {%- endif -%} + {%- if interface_configuration_type not in ["dhcp", "static"] -%} + unknown interface_configuration_type, {%- endif -%} - {%- if interface_mac is defined and interface_mac -%} - {{ network.mac_to_interface(interface_mac) | default("") }} + {%- if interface_configuration_type == "static" and + (interface_static_ip is undefined or not interface_static_ip or + interface_static_netmask is undefined or not interface_static_netmask) -%} + interface_static_ip or interface_static_netmask is not defined {%- endif -%} - {%- if interface_name is defined and interface_name -%} - {{ interface_name }} - {%- endif -%}' -interface_identifiers: - interface_ip: '{{ interface_ip }}' - interface_mac: '{{ interface_mac }}' - interface_name: '{{ interface_name }}' -interface_condition_single_interface_identifier: '{{ interface_identifiers | dict2items | map(attribute="value") | select("string") | select("ne", "") | list | length != 1 }}' diff --git a/templates/interface/meta/main.yml b/templates/interface/meta/main.yml index 58ecda581c150aac8a05d5d99e63955a1cae7073..c5042189b91c25fe76247d8851233e6abbafbfe0 100644 --- a/templates/interface/meta/main.yml +++ b/templates/interface/meta/main.yml @@ -8,7 +8,7 @@ galaxy_info: author: Kamil Andoniadis description: Basic network interface configuration licence: MIT - min_ansible_version: 2.3.3 + min_ansible_version: 2.8 platforms: - name: Debian versions: diff --git a/templates/interface/tasks/clean.yml b/templates/interface/tasks/clean.yml index 36a651b9e5b6bff74029196dc471219b519fcc64..bb36d212fe6ddea9347ff34d5ad0f17f77378077 100644 --- a/templates/interface/tasks/clean.yml +++ b/templates/interface/tasks/clean.yml @@ -11,14 +11,14 @@ - name: remove old iface settings for retrieved interface name replace: path: '{{ item }}' - regexp: ^iface[ \t]{{ interface_device }}[ \t].*(\n[ \t]+.*)* + regexp: ^iface[ \t]{{ interface_name }}[ \t].*(\n[ \t]+.*)* notify: interface_networking_restart with_items: '{{ interface_config_files }}' - name: remove the rest of old settings for retrieved interface name replace: path: '{{ item }}' - regexp: '^.*(?<=\s){{ interface_device }}(?=\s).*$' + regexp: '^.*(?<=\s){{ interface_name }}(?=\s).*$' notify: interface_networking_restart with_items: '{{ interface_config_files }}' diff --git a/templates/interface/tasks/interface.yml b/templates/interface/tasks/interface.yml index 5f78cca50fef9c49df709de26ec1b26379235549..5b17f266864d1fd081abc2873a65aed3d17d7fdc 100644 --- a/templates/interface/tasks/interface.yml +++ b/templates/interface/tasks/interface.yml @@ -3,22 +3,23 @@ blockinfile: path: '{{ interface_file }}' create: yes - marker: '# {mark} {{ interface_device }}' + marker: '# {mark} {{ interface_name }}' block: | - allow-hotplug {{ interface_device }} - auto {{ interface_device }} - iface {{ interface_device }} inet static - address {{ interface_ip }} - netmask {{ interface_netmask }} + allow-hotplug {{ interface_name }} + auto {{ interface_name }} + iface {{ interface_name }} inet {{ interface_configuration_type }} + {% if interface_configuration_type == "static" -%} + address {{ interface_static_ip }} + netmask {{ interface_static_netmask }} + {% endif -%} mtu {{ interface_mtu }} {% if interface_default_gateway -%} - gateway {{ interface_default_gateway }} - up route add default gw {{ interface_default_gateway }} + up route add default gw {{ interface_default_gateway }} {% endif -%} {% if interface_routes -%} {% for route in interface_routes -%} - post-up ip route add {{ route['network'] }}/{{ route['mask'] }} via {{ route['gateway'] }} - pre-down ip route del {{ route['network'] }}/{{ route['mask'] }} via {{ route['gateway'] }} + post-up ip route add {{ route['network'] }}/{{ route['netmask'] }} via {{ route['gateway'] }} + pre-down ip route del {{ route['network'] }}/{{ route['netmask'] }} via {{ route['gateway'] }} {% endfor %} {% endif %} notify: interface_networking_restart diff --git a/templates/interface/tasks/main.yml b/templates/interface/tasks/main.yml index 7e69f74724ae2ed1bf954c99f929b0a53dceccf5..61166191278703e7cfcf53d30412c4cb3bfe3c66 100644 --- a/templates/interface/tasks/main.yml +++ b/templates/interface/tasks/main.yml @@ -1,8 +1,8 @@ -- name: check existence of single interface identifier +- name: sanity check fail: - msg: there must be set exactly one of [interface_ip|interface_mac|interface_name] variables, got {{ interface_identifiers }} - when: interface_condition_single_interface_identifier + msg: '{{ interface_sanity_check_msg }}' + when: interface_sanity_check_msg | length > 0 - include: clean.yml when: interface_clean is defined and interface_clean