---
- name: network-interfaces | Manage additional network interfaces, Ubuntu style
  tags:
    - network_interface
    - networking
  when:
    - ansible_distribution == 'Ubuntu'
    - ubuntu_configure_additional_interfaces
  block:
    - name: network-interfaces | Check if netplan is in use
      ansible.builtin.stat:
        path: /etc/netplan
      register: netplan_in_use
    - name: network-interfaces | Check if additional interfaces have been defined
      ansible.builtin.set_fact:
        net_ints: '{% for i in ansible_interfaces %}{% if i != ansible_lo.device and i != ansible_default_ipv4.interface %}"{{ i }}"{% if not loop.last %},{% endif %}{% endif %}{% endfor %}'
      when: netplan_in_use.stat.isdir
    - name: network-interfaces | Create a dictionary of additional interfaces
      ansible.builtin.set_fact:
        new_ints: '[{% for i in ansible_interfaces %}{% if i != ansible_lo.device and i != ansible_default_ipv4.interface %}"{{ i }}"{% if not loop.last %},{% endif %}{% endif %}{% endfor %}]'
      when: net_ints is defined and net_ints | length != 0
    - name: network-interfaces | Print the loopback interface name
      ansible.builtin.debug:
        msg: "Loopback interface: {{ ansible_lo.device }}"
    - name: network-interfaces | Print the name of the default interface
      ansible.builtin.debug:
        msg: "Loopback interface: {{ ansible_default_ipv4.interface }}"
    - name: network-interfaces | Print the additional interfaces
      ansible.builtin.debug:
        msg: "Interfaces list: {{ new_ints }}"
    - name: network-interfaces | Override the interfaces list
      ansible.builtin.set_fact:
        new_ints: "{{ ubuntu_configure_additional_ints_list }}"
      when: ubuntu_configure_additional_ints_list | length != 0
    - name: network-interfaces | Install the network interface file
      ansible.builtin.template:
        src: netplan-70-ansible.yaml.j2
        dest: /etc/netplan/70-ansible.yaml
        owner: root
        group: root
        mode: "0644"
      when: ubuntu_netplan_interfaces is defined and ubuntu_netplan_interfaces | length != 0
      notify: Netplan Apply

- name: network-interfaces | Force the Netplan Apply command execution
  ansible.builtin.meta: flush_handlers
  tags:
    - network_interface
    - networking