From 2708dfe3f20fb860541c9e14367b7fb67acbabbe Mon Sep 17 00:00:00 2001 From: "Dustin C. Hatch" Date: Sun, 10 Oct 2021 11:54:12 -0500 Subject: [PATCH] r/systemd-networkd: Role to configure networkd *systemd-networkd* is (currently) my preferred way to manage network interfaces on machines running Fedora. The *systemd-networkd* role provides a generic way to configure network links, devices, and interfaces, using Ansible variables to generate network unit configuration files. --- hosts.offline | 2 ++ roles/systemd-networkd/defaults/main.yml | 3 ++ roles/systemd-networkd/handlers/main.yml | 2 ++ roles/systemd-networkd/tasks/main.yml | 34 +++++++++++++++++++++ roles/systemd-networkd/templates/network.j2 | 12 ++++++++ systemd-networkd.yml | 6 ++++ 6 files changed, 59 insertions(+) create mode 100644 roles/systemd-networkd/defaults/main.yml create mode 100644 roles/systemd-networkd/handlers/main.yml create mode 100644 roles/systemd-networkd/tasks/main.yml create mode 100644 roles/systemd-networkd/templates/network.j2 create mode 100644 systemd-networkd.yml diff --git a/hosts.offline b/hosts.offline index f8ee179..88ba727 100644 --- a/hosts.offline +++ b/hosts.offline @@ -20,6 +20,8 @@ koji0.pyrocufflink.blue [koji-web] koji0.pyrocufflink.blue +[networkd] + [pyrocufflink] koji0.pyrocufflink.blue taiga0.pyrocufflink.blue diff --git a/roles/systemd-networkd/defaults/main.yml b/roles/systemd-networkd/defaults/main.yml new file mode 100644 index 0000000..7829ac6 --- /dev/null +++ b/roles/systemd-networkd/defaults/main.yml @@ -0,0 +1,3 @@ +networkd_links: [] +networkd_devices: [] +networkd_networks: [] diff --git a/roles/systemd-networkd/handlers/main.yml b/roles/systemd-networkd/handlers/main.yml new file mode 100644 index 0000000..1523d58 --- /dev/null +++ b/roles/systemd-networkd/handlers/main.yml @@ -0,0 +1,2 @@ +- name: reload networkd + command: networkctl reload diff --git a/roles/systemd-networkd/tasks/main.yml b/roles/systemd-networkd/tasks/main.yml new file mode 100644 index 0000000..d2761b4 --- /dev/null +++ b/roles/systemd-networkd/tasks/main.yml @@ -0,0 +1,34 @@ +- name: ensure systemd-networkd is installed + package: + name: systemd-networkd + state: present + tags: + - install + +- name: ensure systemd network configuration directory exists + file: + path: /etc/systemd/network + mode: '0755' + state: directory + +- name: ensure systemd network links are configured + template: + src: network.j2 + dest: /etc/systemd/network/{{ item.name }}.link + mode: '0644' + loop: '{{ networkd_links }}' + notify: reload networkd +- name: ensure systemd network devices are configured + template: + src: network.j2 + dest: /etc/systemd/network/{{ item.name }}.netdev + mode: '0644' + loop: '{{ networkd_devices }}' + notify: reload networkd +- name: ensure systemd networks are configured + template: + src: network.j2 + dest: /etc/systemd/network/{{ item.name }}.network + mode: '0644' + loop: '{{ networkd_networks }}' + notify: reload networkd diff --git a/roles/systemd-networkd/templates/network.j2 b/roles/systemd-networkd/templates/network.j2 new file mode 100644 index 0000000..a199b8d --- /dev/null +++ b/roles/systemd-networkd/templates/network.j2 @@ -0,0 +1,12 @@ +{% for section in item if section != "name" %} +[{{ section }}] +{% for key in item[section] %} +{% if item[section][key] is not iterable or item[section][key] is string %} +{{ key }}={{ item[section][key] }} +{% else %} +{% for value in item[section][key] %} +{{ key }}={{ value }} +{% endfor %} +{% endif %} +{% endfor %} +{% endfor %} diff --git a/systemd-networkd.yml b/systemd-networkd.yml new file mode 100644 index 0000000..f5418ea --- /dev/null +++ b/systemd-networkd.yml @@ -0,0 +1,6 @@ +- hosts: networkd + roles: + - role: systemd-networkd + tags: + - networkd + - netconfig