diff --git a/tasks/connections.config.yml b/tasks/connections.config.yml new file mode 100644 index 0000000..e842120 --- /dev/null +++ b/tasks/connections.config.yml @@ -0,0 +1,50 @@ +--- +- name: Configure NetworkManager [ type loopback ] + community.general.nmcli: + autoconnect: "{{ connection.autoconnect | default('true') }}" + conn_name: "{{ connection.con_name | default('lo') }}" + ifname: "{{ connection.ifname | default('lo') }}" + type: "{{ connection.type }}" + ip4: "{{ connection.ip4 | default('') }}" + dns4: "{{ connection.dns4 | default([]) }}" + method4: "{{ connection.method4 | default('manual') }}" + method6: "{{ connection.method6 | default('auto') }}" + state: present + with_items: "{{ network }}" + when: connection.type == 'loopback' + loop_control: + loop_var: connection + notify: Restart NetworkManager + +- name: Configure NetworkManager [ type ethernet ] + community.general.nmcli: + "{{ connection_params | combine(dynamic_params) }}" + with_items: "{{ network }}" + when: connection.type == 'ethernet' + loop_control: + loop_var: connection + vars: + connection_params: + autoconnect: "{{ connection.autoconnect | default('true') }}" + conn_name: "{{ connection.con_name }}" + ifname: "{{ connection.ifname | default(connection.con_name) }}" + type: "{{ connection.type }}" + state: "{{ connection.state | default('present') }}" + dynamic_params: >- + {{ + dict( + ip4=connection.ip4 if connection.ip4 is defined else omit, + gw4=connection.gw4 if connection.gw4 is defined else omit, + dns4=connection.dns4 if connection.dns4 is defined else omit, + routes4=connection.routes4 if connection.routes4 is defined else omit, + method4=connection.method4 if connection.method4 is defined else 'disabled', + ip6=connection.ip6 if connection.ip6 is defined else omit, + gw6=connection.gw6 if connection.gw6 is defined else omit, + method6=connection.method6 if connection.method6 is defined else 'disabled' + ) + }} + notify: Restart NetworkManager + +# notify: +# - networking changed +# - network-manager configuration changed \ No newline at end of file diff --git a/tasks/install-nm.debian-12.yml b/tasks/install-nm.debian-12.yml new file mode 100644 index 0000000..61d3951 --- /dev/null +++ b/tasks/install-nm.debian-12.yml @@ -0,0 +1,3 @@ +- name: Task specific to Debian 12 + ansible.builtin.debug: + msg: "Executing tasks for Debian 12" diff --git a/tasks/main.yml b/tasks/main.yml index f067d56..eae3653 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,12 +1,27 @@ --- # tasks file for network-manager -- name: "apt install NetworkManager {{ nm_version }} " - when: nm__skip_install is not true - apt: - name: "network-manager{{ nm_version }}" - default_release: "{{ ansible_distribution_release }}-backports" - autoremove: true - update_cache: true +#- name: "apt install NetworkManager {{ nm_version }} " +# when: nm__skip_install is not true +# apt: +# name: "network-manager{{ nm_version }}" +# default_release: "{{ ansible_distribution_release }}-backports" +# autoremove: true +# update_cache: true +- name: Get OS and major version specific for NetworkManager installation + ansible.builtin.set_fact: + install_nm_tasks: >- + {%- if ansible_distribution == "Debian" and ansible_distribution_major_version == "12" -%} + install-nm.debian-12.yml + {%- elif ansible_distribution == "Debian" and ansible_distribution_major_version in ["10", "11"] -%} + install-nm.debian-10.yml + {%- elif ansible_distribution == "Ubuntu" -%} + install-nm.ubuntu.yml + {%- else -%} + install-nm.default.yml + {%- endif -%} + +- name: Install NetworkManager for {{ ansible_distribution }} {{ ansible_distribution_major_version }} + ansible.builtin.include_tasks: "{{ install_nm_tasks }}" - name: Enable service NetworkManager and ensure it is not masked ansible.builtin.systemd_service: @@ -14,8 +29,8 @@ enabled: true masked: no -- name: config globally managed devices - template: +- name: Configure globally managed devices to NM + ansible.builtin.template: src: "conf.d/10-globally-managed-devices.j2" dest: "{{ globally_managed_devices_path }}" owner: root @@ -24,51 +39,19 @@ when: globally_managed_devices is true notify: Restart NetworkManager -- name: cleanup globally managed devices - file: +- name: Cleanup globally managed devices + ansible.builtin.file: path: "{{ globally_managed_devices_path }}" state: absent when: not globally_managed_devices notify: Restart NetworkManager - name: Include tasks for checking and removing udev rules - include_tasks: check_udev_rules.yml + ansible.builtin.include_tasks: check_udev_rules.yml -- name: Configure NetworkManager [ type loopback ] - community.general.nmcli: - autoconnect: "{{ connection.autoconnect | default('true') }}" - conn_name: "{{ connection.con_name | default('lo') }}" - ifname: "{{ connection.ifname | default('lo') }}" - type: "{{ connection.type }}" - ip4: "{{ connection.ip4 | default('') }}" - dns4: "{{ connection.dns4 | default([]) }}" - method4: "{{ connection.method4 | default('manual') }}" - method6: "{{ connection.method6 | default('auto') }}" - state: present - with_items: "{{ network }}" - when: connection.type == 'loopback' - loop_control: - loop_var: connection - notify: Restart NetworkManager - -- name: Configure NetworkManager [ type ethernet ] - community.general.nmcli: - autoconnect: "{{ connection.autoconnect | default('true') }}" - conn_name: "{{ connection.con_name }}" - ifname: "{{ connection.ifname }}" - type: "{{ connection.type }}" - ip4: "{{ connection.ip4 | default('') }}" - gw4: "{{ connection.gw4 | default('') }}" - dns4: "{{ connection.dns4 | default([]) }}" - routes4: "{{ connection.routes4 | default([]) }}" - method4: "{{ connection.method4 | default('manual') }}" - method6: "{{ connection.method6 | default('disabled') }}" - state: present - with_items: "{{ network }}" - when: connection.type == 'ethernet' - loop_control: - loop_var: connection - notify: Restart NetworkManager +- name: Include tasks for managing connections + when: network is defined + ansible.builtin.include_tasks: connections.config.yml - name: Notify the reboot handler meta: flush_handlers \ No newline at end of file diff --git a/vars/main.yml b/vars/main.yml index 9353693..654acc0 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -1,2 +1,25 @@ --- # vars file for network-manager +#network: +# - con_name: lo +# ifname: lo +# type: loopback +# ip4: "127.0.0.1/8,169.254.0.0/32" +# dns4: 77.88.8.8 +# method4: manual +# method6: auto +# - con_name: ens160 +# ifname: ens160 +# type: ethernet +# ip4: 192.168.0.2/24 +# gw4: 192.168.0.1 +# method4: manual +# method6: disabled + +template_connection_params: + ip4: "{{ connection.ip4 | default('null') }}" + gw4: "{{ connection.gw4 | default('null') }}" + dns4: "{{ connection.dns4 | default('null') }}" + routes4: "{{ connection.routes4 | default('null') }}" + method4: "{{ connection.method4 | default('disabled') }}" + method6: "{{ connection.method6 | default('disabled') }}" \ No newline at end of file