From 57e5791728d9d1dfa5f95f148cdbf6db4d482de6 Mon Sep 17 00:00:00 2001 From: Jeremy Lecour Date: Sun, 26 Apr 2020 18:39:25 +0200 Subject: [PATCH] networkd-to-ifconfig: add variables for configuration by variables --- CHANGELOG.md | 1 + networkd-to-ifconfig/defaults/main.yml | 9 ++++ networkd-to-ifconfig/tasks/main.yml | 46 ++++++++++++------- .../tasks/set_facts_from_ansible.yml | 13 ++++++ .../tasks/set_facts_from_systemd.yml | 18 ++++++++ networkd-to-ifconfig/templates/interfaces.j2 | 11 +++-- 6 files changed, 78 insertions(+), 20 deletions(-) create mode 100644 networkd-to-ifconfig/defaults/main.yml create mode 100644 networkd-to-ifconfig/tasks/set_facts_from_ansible.yml create mode 100644 networkd-to-ifconfig/tasks/set_facts_from_systemd.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f007129..de8e9c27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ The **patch** part changes incrementally at each release. * mysql-oracle: backport tasks from mysql role * mysql: activate binary logs by specifying log_bin path * mysql: specify a custom server_id +* networkd-to-ifconfig: add variables for configuration by variables * packweb-apache: Deploy opcache.php to give some insights on PHP's opcache status * php: variable to install the mysqlnd module instead of the default mysql module * postgresql : variable to install PostGIS (default: `False`) diff --git a/networkd-to-ifconfig/defaults/main.yml b/networkd-to-ifconfig/defaults/main.yml new file mode 100644 index 00000000..eb808063 --- /dev/null +++ b/networkd-to-ifconfig/defaults/main.yml @@ -0,0 +1,9 @@ +--- + +force_update_eni_file: False +eni_interface_name: Null +eni_ipv4_address: Null +eni_ipv4_gateway: Null +eni_ipv6_address: Null +eni_ipv6_gateway: Null +ipv6_gateway_mask: "xxxx.xxxx.xxxx.xxFF:FF:FF:FF:FF" diff --git a/networkd-to-ifconfig/tasks/main.yml b/networkd-to-ifconfig/tasks/main.yml index 02ef0c53..29ca3b4f 100644 --- a/networkd-to-ifconfig/tasks/main.yml +++ b/networkd-to-ifconfig/tasks/main.yml @@ -7,26 +7,38 @@ - debug: msg: A /etc/network/interfaces file already exists, nothing is done. - when: interfaces_file.stat.exists + when: interfaces_file.stat.exists and not force_update_eni_file - block: - - name: "Parse addresses" - shell: "grep Address= /etc/systemd/network/50-default.network | cut -d'=' -f2" - register: network_address_grep - check_mode: no - - - name: "Parse gateways" - shell: "grep Gateway= /etc/systemd/network/50-default.network | cut -d'=' -f2" - register: network_gateway_grep - check_mode: no + - name: "Look for systemd network config" + stat: + path: /etc/systemd/network/50-default.network + register: systemd_network_file - - name: Prepare variables + - name: Set interface name set_fact: eni_interface_name: "{{ ansible_default_ipv4.interface }}" - eni_ipv4_address: "{{ network_address_grep.stdout_lines | ipv4 | first }}" - eni_ipv4_gateway: "{{ network_gateway_grep.stdout_lines | ipv4 | first }}" - eni_ipv6_address: "{{ network_address_grep.stdout_lines | ipv6 | first }}" - eni_ipv6_gateway: "{{ network_gateway_grep.stdout_lines | ipv6 | first }}" + + - include: set_facts_from_systemd.yml + when: systemd_network_file.stat.exists + + - include: set_facts_from_ansible.yml + when: not systemd_network_file.stat.exists + + - name: Check config (IPv4) + assert: + that: + - eni_ipv4_address | ipv4 + - eni_ipv4_gateway | ipv4 + msg: "IPv4 configuration is invalid" + + - name: Check config (IPV6) + assert: + that: + - eni_ipv6_address | ipv6 + - eni_ipv6_gateway | ipv6 + msg: "IPv6 configuration is invalid" + when: eni_ipv6_address or eni_ipv6_gateway - name: "A new /etc/network/interfaces is generated" template: @@ -48,7 +60,7 @@ enabled: True state: restarted ignore_errors: True - + - debug: msg: You should verify your configuration, then reboot the server. - when: not interfaces_file.stat.exists + when: force_update_eni_file or not interfaces_file.stat.exists diff --git a/networkd-to-ifconfig/tasks/set_facts_from_ansible.yml b/networkd-to-ifconfig/tasks/set_facts_from_ansible.yml new file mode 100644 index 00000000..21de7357 --- /dev/null +++ b/networkd-to-ifconfig/tasks/set_facts_from_ansible.yml @@ -0,0 +1,13 @@ +--- + +- name: Prepare variables (IPv4) + set_fact: + eni_ipv4_address: "{{ ansible_default_ipv4.address | ipv4 }}" + eni_ipv4_gateway: "{{ ansible_default_ipv4.gateway | ipv4 }}" + when: ansible_default_ipv4 + +- name: Prepare variables (IPv6) + set_fact: + eni_ipv6_address: "{{ ansible_default_ipv6.address | ipv6 | first }}" + eni_ipv6_gateway: "{{ ansible_default_ipv6.gateway | ipv6 | first }}" + when: ansible_default_ipv6 diff --git a/networkd-to-ifconfig/tasks/set_facts_from_systemd.yml b/networkd-to-ifconfig/tasks/set_facts_from_systemd.yml new file mode 100644 index 00000000..d21012fd --- /dev/null +++ b/networkd-to-ifconfig/tasks/set_facts_from_systemd.yml @@ -0,0 +1,18 @@ +--- + +- name: "Parse addresses" + shell: "grep Address= /etc/systemd/network/50-default.network | cut -d'=' -f2" + register: network_address_grep + check_mode: no + +- name: "Parse gateways" + shell: "grep Gateway= /etc/systemd/network/50-default.network | cut -d'=' -f2" + register: network_gateway_grep + check_mode: no + +- name: Prepare variables + set_fact: + eni_ipv4_address: "{{ network_address_grep.stdout_lines | ipv4 | first }}" + eni_ipv4_gateway: "{{ network_gateway_grep.stdout_lines | ipv4 | first }}" + eni_ipv6_address: "{{ network_address_grep.stdout_lines | ipv6 | first }}" + eni_ipv6_gateway: "{{ network_gateway_grep.stdout_lines | ipv6 | first }}" diff --git a/networkd-to-ifconfig/templates/interfaces.j2 b/networkd-to-ifconfig/templates/interfaces.j2 index f1030430..a5edc9c5 100644 --- a/networkd-to-ifconfig/templates/interfaces.j2 +++ b/networkd-to-ifconfig/templates/interfaces.j2 @@ -10,8 +10,13 @@ iface {{ eni_interface_name }} inet static address {{ eni_ipv4_address }} gateway {{ eni_ipv4_gateway }} +{% if eni_ipv6_address and eni_ipv6_gateway %} iface {{ eni_interface_name }} inet6 static address {{ eni_ipv6_address }} - gateway {{ eni_ipv6_gateway }} - post-up /sbin/ip -6 route add {{ eni_ipv6_gateway }} dev {{ eni_interface_name }} - post-up /sbin/ip -6 route add default via IPV6 + netmask 128 + +post-up /sbin/ip -f inet6 route add {{ eni_ipv6_gateway }} dev {{ eni_interface_name }} +post-up /sbin/ip -f inet6 route add default via {{ eni_ipv6_address }} +pre-down /sbin/ip -f inet6 route del {{ eni_ipv6_gateway }} dev {{ eni_interface_name }} +pre-down /sbin/ip -f inet6 route del default via {{ eni_ipv6_gateway }} +{% endif %}