From 9dea3340aecdb982d8e331b152f85fc5393a2899 Mon Sep 17 00:00:00 2001 From: Robert Kaussow Date: Mon, 10 Oct 2022 15:17:16 +0200 Subject: [PATCH] fix: apply network changes on systems using nm --- handlers/main.yml | 3 +- tasks/main.yml | 70 +++++++++--------------------------------- tasks/setup.yml | 58 ++++++++++++++++++++++++++++++++++ templates/etc/hosts.j2 | 8 ++--- vars/default.yml | 2 ++ vars/redhat-9.yml | 6 ++++ 6 files changed, 85 insertions(+), 62 deletions(-) create mode 100644 tasks/setup.yml create mode 100644 vars/default.yml create mode 100644 vars/redhat-9.yml diff --git a/handlers/main.yml b/handlers/main.yml index bd9bca4..7fa54d2 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,10 +1,9 @@ --- - block: - name: Restart network - shell: sleep 2 && systemctl restart network + shell: "{{ __network_restart_command }}" async: 1 poll: 0 - ignore_errors: yes when: not require_reboot | bool listen: __network_restart diff --git a/tasks/main.yml b/tasks/main.yml index 90c4027..cec409b 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,57 +1,15 @@ --- -- name: Set flag require_reboot - set_fact: - require_reboot: "{{ True if (network_fqdn != ansible_fqdn and network_reboot_enabled | bool) else False }}" - -- block: - - name: Set hostname - hostname: - name: "{{ network_hostname }}" - when: network_hostname - notify: __host_reboot - - - name: Write hosts file - template: - src: etc/hosts.j2 - dest: /etc/hosts - owner: root - group: root - mode: 0644 - notify: __host_reboot - - - name: Add network interface configuration - template: - src: etc/sysconfig/network-scrips/ifcfg.j2 - dest: "/etc/sysconfig/network-scripts/ifcfg-{{ item.key }}" - owner: root - group: root - mode: 0644 - loop: "{{ network_interfaces | dict2items }}" - loop_control: - label: "{{ item.key }}" - when: item.key in ansible_interfaces or item.key.split(":")[0] in ansible_interfaces - notify: __network_restart - - - name: Add static routes - copy: - content: "{{ item.value }}" - dest: "/etc/sysconfig/network-scripts/route-{{ item.key }}" - owner: root - group: root - mode: 0644 - loop: "{{ network_routes | dict2items }}" - loop_control: - label: "{{ item.key }}" - when: item.key in ansible_interfaces - notify: __network_restart - - - name: Set DNS servers - template: - src: etc/resolv.conf.j2 - dest: /etc/resolv.conf - owner: root - group: root - mode: 0644 - when: network_resolve_enabled | bool - become: True - become_user: root +- include_vars: "{{ var_files }}" + vars: + var_files: "{{ lookup('first_found', params, errors='ignore') }}" + params: + files: + - "{{ ansible_lsb.id | default('') | lower }}.yml" + - "{{ ansible_os_family | lower }}-{{ ansible_distribution_major_version }}.yml" + - "{{ ansible_os_family | lower }}.yml" + - default.yml + paths: + - "vars" + when: var_files + +- include_tasks: setup.yml diff --git a/tasks/setup.yml b/tasks/setup.yml new file mode 100644 index 0000000..4f5327c --- /dev/null +++ b/tasks/setup.yml @@ -0,0 +1,58 @@ +--- +- name: Set flag require_reboot + set_fact: + require_reboot: "{{ True if (network_fqdn != ansible_fqdn and network_reboot_enabled | bool) else False }}" + +- block: + - name: Set hostname + hostname: + name: "{{ network_hostname }}" + when: network_hostname + notify: __host_reboot + + - name: Write hosts file + template: + src: etc/hosts.j2 + dest: /etc/hosts + owner: root + group: root + mode: 0644 + notify: __host_reboot + + - name: Add network interface configuration + template: + src: etc/sysconfig/network-scrips/ifcfg.j2 + dest: "/etc/sysconfig/network-scripts/ifcfg-{{ item.key }}" + owner: root + group: root + mode: 0644 + loop: "{{ network_interfaces | dict2items }}" + loop_control: + label: "{{ item.key }}" + when: item.key in ansible_interfaces or item.key.split(":")[0] in ansible_interfaces + register: __network_ifcfg + notify: __network_restart + + - name: Add static routes + copy: + content: "{{ item.value }}" + dest: "/etc/sysconfig/network-scripts/route-{{ item.key }}" + owner: root + group: root + mode: 0644 + loop: "{{ network_routes | dict2items }}" + loop_control: + label: "{{ item.key }}" + when: item.key in ansible_interfaces + notify: __network_restart + + - name: Set DNS servers + template: + src: etc/resolv.conf.j2 + dest: /etc/resolv.conf + owner: root + group: root + mode: 0644 + when: network_resolve_enabled | bool + become: True + become_user: root diff --git a/templates/etc/hosts.j2 b/templates/etc/hosts.j2 index e18f659..0cbe905 100644 --- a/templates/etc/hosts.j2 +++ b/templates/etc/hosts.j2 @@ -1,11 +1,11 @@ #jinja2: lstrip_blocks: True {{ ansible_managed | comment }} -127.0.0.1 localhost localhost.localdomain +127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 {% if network_ipv6_enabled %} -::1 localhost6 localhost6.localdomain6 +::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 {% endif %} -{% if network_hostname is defined and network_fqdn is defined and network_interfaces[network_defaultif].ipaddr is defined %} -{{ network_interfaces[network_defaultif].ipaddr }} {{ network_fqdn }} {{ network_hostname }} +{% if network_hostname is defined and network_fqdn is defined and network_defaultif is defined %} +{{ network_interfaces[network_defaultif].ipaddr | default(hostvars[inventory_hostname]["ansible_" + network_defaultif].ipv4.address) }} {{ network_fqdn }} {{ network_hostname }} {% endif %} {% if network_hosts_extra %} {% for item in network_hosts_extra %} diff --git a/vars/default.yml b/vars/default.yml new file mode 100644 index 0000000..cd9eb38 --- /dev/null +++ b/vars/default.yml @@ -0,0 +1,2 @@ +--- +__network_restart_command: sleep 2 && systemctl restart network diff --git a/vars/redhat-9.yml b/vars/redhat-9.yml new file mode 100644 index 0000000..15a7c29 --- /dev/null +++ b/vars/redhat-9.yml @@ -0,0 +1,6 @@ +--- +__network_restart_command: |- + nmcli connection reload &&\ + {%- for file in __network_ifcfg | json_query('results[?changed==`true`].dest') %} + nmcli conn up {{ file }} + {%- endfor %}