From 63b4d661569d9429dc110fb279328a4cb0983072 Mon Sep 17 00:00:00 2001 From: ace Date: Mon, 30 Jun 2025 02:42:11 +0300 Subject: [PATCH] support interface removal --- handlers/main.yaml | 1 + tasks/Debian/network_manager.yaml | 39 ++++++++++++++++++++----------- tasks/RedHat/network_manager.yaml | 39 ++++++++++++++++++++----------- 3 files changed, 53 insertions(+), 26 deletions(-) diff --git a/handlers/main.yaml b/handlers/main.yaml index 710b1d8..bb4aa5c 100644 --- a/handlers/main.yaml +++ b/handlers/main.yaml @@ -7,3 +7,4 @@ - name: Reload interface with nmcli command: nmcli conn up "{{ item }}" loop: "{{ reload_interfaces | unique }}" + when: item.state is not defined or item.state != "absent" diff --git a/tasks/Debian/network_manager.yaml b/tasks/Debian/network_manager.yaml index 0f8174c..0f4d19e 100644 --- a/tasks/Debian/network_manager.yaml +++ b/tasks/Debian/network_manager.yaml @@ -1,27 +1,30 @@ --- -- block: +- name: Configure interface {{ iface.conn_name }} + when: iface.state is not defined or iface.state != "absent" + block: - name: "{{ iface.conn_name }} | Configure interface with nmcli" community.general.nmcli: conn_name: "{{ iface.conn_name }}" + autoconnect: "{{ iface.autoconnect | default(omit) }}" type: "{{ iface.type | default('ethernet') }}" - ip4: "{{ omit if iface.ip4 is not defined else (iface.ip4|join(', ')) }}" - ip6: "{{ omit if iface.ip6 is not defined else (iface.ip6|join(', ')) }}" + ip4: "{{ omit if iface.ip4 is not defined else iface.ip4|list }}" + ip6: "{{ omit if iface.ip6 is not defined else iface.ip6|list }}" gw4: "{{ iface.gw4 | default(omit) }}" gw6: "{{ iface.gw6 | default(omit) }}" dns4: "{{ iface.dns4 | default(omit) }}" dns6: "{{ iface.dns6 | default(omit) }}" never_default4: "{{ iface.never_default4 | default(omit) }}" vlanid: "{{ iface.vlanid | default(omit) }}" - mtu: "{{ iface.mtu | default(0) }}" + mtu: "{{ iface.mtu | default(omit) }}" zone: "{{ iface.zone | default(omit) }}" - state: present + state: "{{ iface.state | default('present') }}" notify: - Reload interface with nmcli register: configure_interface - name: "{{ iface.conn_name }} | Add interface to reload list" set_fact: - reload_interfaces: "{{ reload_interfaces + [ iface.conn_name ] }}" + reload_interfaces: "{{ reload_interfaces + [ iface.conn_name ] }}" when: configure_interface.changed - name: "{{ iface.conn_name }} | Get existing ipv4 routes" @@ -50,30 +53,40 @@ - name: "{{ iface.conn_name }} | Update routes and rules with nmcli" community.general.nmcli: conn_name: "{{ iface.conn_name }}" + autoconnect: "{{ iface.autoconnect | default(omit) }}" type: "{{ iface.type | default('ethernet') }}" - ip4: "{{ omit if iface.ip4 is not defined else (iface.ip4|join(', ')) }}" - ip6: "{{ omit if iface.ip6 is not defined else (iface.ip6|join(', ')) }}" + ip4: "{{ omit if iface.ip4 is not defined else iface.ip4|list }}" + ip6: "{{ omit if iface.ip6 is not defined else iface.ip6|list }}" gw4: "{{ iface.gw4 | default(omit) }}" gw6: "{{ iface.gw6 | default(omit) }}" dns4: "{{ iface.dns4 | default(omit) }}" dns6: "{{ iface.dns6 | default(omit) }}" never_default4: "{{ iface.never_default4 | default(omit) }}" vlanid: "{{ iface.vlanid | default(omit) }}" - routes4: "{{ iface.routes4 if (existing_routes4 != new_routes4) else omit }}" + routes4: "{{ iface.routes4 | default([]) if (existing_routes4 != new_routes4) else omit }}" routing_rules4: "{{ iface.routing_rules4 | default(omit) }}" - routes6: "{{ iface.routes6 if (existing_routes6 != new_routes6) else omit }}" + routes6: "{{ iface.routes6 | default([]) if (existing_routes6 != new_routes6) else omit }}" routing_rules6: "{{ iface.routing_rules6 | default(omit) }}" - mtu: "{{ iface.mtu | default(0) }}" + mtu: "{{ iface.mtu | default(omit) }}" zone: "{{ iface.zone | default(omit) }}" - state: present + state: "{{ iface.state | default('present') }}" notify: - Reload interface with nmcli register: update_routes_and_rules - name: "{{ iface.conn_name }} | Add interface to reload list" set_fact: - reload_interfaces: "{{ reload_interfaces + [ iface.conn_name ] }}" + reload_interfaces: "{{ reload_interfaces + [ iface.conn_name ] }}" when: update_routes_and_rules.changed +- name: Delete interface {{ iface.conn_name }} + when: iface.state is defined and iface.state == "absent" + block: + - name: "{{ iface.conn_name }} | Delete interface with nmcli" + community.general.nmcli: + conn_name: "{{ iface.conn_name }}" + type: "{{ iface.type | default('ethernet') }}" + state: "{{ iface.state }}" + #- debug: # msg: "{{ reload_interfaces }}" diff --git a/tasks/RedHat/network_manager.yaml b/tasks/RedHat/network_manager.yaml index 0f8174c..0f4d19e 100644 --- a/tasks/RedHat/network_manager.yaml +++ b/tasks/RedHat/network_manager.yaml @@ -1,27 +1,30 @@ --- -- block: +- name: Configure interface {{ iface.conn_name }} + when: iface.state is not defined or iface.state != "absent" + block: - name: "{{ iface.conn_name }} | Configure interface with nmcli" community.general.nmcli: conn_name: "{{ iface.conn_name }}" + autoconnect: "{{ iface.autoconnect | default(omit) }}" type: "{{ iface.type | default('ethernet') }}" - ip4: "{{ omit if iface.ip4 is not defined else (iface.ip4|join(', ')) }}" - ip6: "{{ omit if iface.ip6 is not defined else (iface.ip6|join(', ')) }}" + ip4: "{{ omit if iface.ip4 is not defined else iface.ip4|list }}" + ip6: "{{ omit if iface.ip6 is not defined else iface.ip6|list }}" gw4: "{{ iface.gw4 | default(omit) }}" gw6: "{{ iface.gw6 | default(omit) }}" dns4: "{{ iface.dns4 | default(omit) }}" dns6: "{{ iface.dns6 | default(omit) }}" never_default4: "{{ iface.never_default4 | default(omit) }}" vlanid: "{{ iface.vlanid | default(omit) }}" - mtu: "{{ iface.mtu | default(0) }}" + mtu: "{{ iface.mtu | default(omit) }}" zone: "{{ iface.zone | default(omit) }}" - state: present + state: "{{ iface.state | default('present') }}" notify: - Reload interface with nmcli register: configure_interface - name: "{{ iface.conn_name }} | Add interface to reload list" set_fact: - reload_interfaces: "{{ reload_interfaces + [ iface.conn_name ] }}" + reload_interfaces: "{{ reload_interfaces + [ iface.conn_name ] }}" when: configure_interface.changed - name: "{{ iface.conn_name }} | Get existing ipv4 routes" @@ -50,30 +53,40 @@ - name: "{{ iface.conn_name }} | Update routes and rules with nmcli" community.general.nmcli: conn_name: "{{ iface.conn_name }}" + autoconnect: "{{ iface.autoconnect | default(omit) }}" type: "{{ iface.type | default('ethernet') }}" - ip4: "{{ omit if iface.ip4 is not defined else (iface.ip4|join(', ')) }}" - ip6: "{{ omit if iface.ip6 is not defined else (iface.ip6|join(', ')) }}" + ip4: "{{ omit if iface.ip4 is not defined else iface.ip4|list }}" + ip6: "{{ omit if iface.ip6 is not defined else iface.ip6|list }}" gw4: "{{ iface.gw4 | default(omit) }}" gw6: "{{ iface.gw6 | default(omit) }}" dns4: "{{ iface.dns4 | default(omit) }}" dns6: "{{ iface.dns6 | default(omit) }}" never_default4: "{{ iface.never_default4 | default(omit) }}" vlanid: "{{ iface.vlanid | default(omit) }}" - routes4: "{{ iface.routes4 if (existing_routes4 != new_routes4) else omit }}" + routes4: "{{ iface.routes4 | default([]) if (existing_routes4 != new_routes4) else omit }}" routing_rules4: "{{ iface.routing_rules4 | default(omit) }}" - routes6: "{{ iface.routes6 if (existing_routes6 != new_routes6) else omit }}" + routes6: "{{ iface.routes6 | default([]) if (existing_routes6 != new_routes6) else omit }}" routing_rules6: "{{ iface.routing_rules6 | default(omit) }}" - mtu: "{{ iface.mtu | default(0) }}" + mtu: "{{ iface.mtu | default(omit) }}" zone: "{{ iface.zone | default(omit) }}" - state: present + state: "{{ iface.state | default('present') }}" notify: - Reload interface with nmcli register: update_routes_and_rules - name: "{{ iface.conn_name }} | Add interface to reload list" set_fact: - reload_interfaces: "{{ reload_interfaces + [ iface.conn_name ] }}" + reload_interfaces: "{{ reload_interfaces + [ iface.conn_name ] }}" when: update_routes_and_rules.changed +- name: Delete interface {{ iface.conn_name }} + when: iface.state is defined and iface.state == "absent" + block: + - name: "{{ iface.conn_name }} | Delete interface with nmcli" + community.general.nmcli: + conn_name: "{{ iface.conn_name }}" + type: "{{ iface.type | default('ethernet') }}" + state: "{{ iface.state }}" + #- debug: # msg: "{{ reload_interfaces }}"