From 776176944d1646fff8a6dbe3ab8247629f60b87a Mon Sep 17 00:00:00 2001
From: Hinrikus Wolf <hinrikus@fsmpi.rwth-aachen.de>
Date: Tue, 22 Feb 2022 22:38:19 +0100
Subject: [PATCH] networkd: add support for link files

---
 networkd/defaults/main.yml           |  8 ++++++++
 networkd/tasks/main.yml              | 11 +++++++++++
 networkd/templates/interface.link.j2 |  9 +++++++++
 3 files changed, 28 insertions(+)
 create mode 100644 networkd/templates/interface.link.j2

diff --git a/networkd/defaults/main.yml b/networkd/defaults/main.yml
index 680ab85..4db2087 100644
--- a/networkd/defaults/main.yml
+++ b/networkd/defaults/main.yml
@@ -1,5 +1,13 @@
 ---
 
+# interfaces:
+#   - identifier: name_for_the_link_file
+#     match:
+#       PermanentMACAddress: "01:23:45:67:89:ab"
+#     link:
+#       Name: veryimportantinterface
+#
+
 # networkd:
 #   - type: 'dhcp'
 #   - type: 'static'
diff --git a/networkd/tasks/main.yml b/networkd/tasks/main.yml
index dca3fe4..e8e06d9 100644
--- a/networkd/tasks/main.yml
+++ b/networkd/tasks/main.yml
@@ -21,6 +21,17 @@
   notify:
     - restart networkd
 
+- name: ensure there are link files if needed
+  template:
+    src: "interface.link.j2"
+    dest: "/etc/systemd/network/{{ item.0 }}-{{ item.1.identifier }}.link"
+    owner: root
+    group: root
+    mode: '0644'
+  with_indexed_items: "{{ interfaces|default([]) }}"
+  notify:
+    - restart networkd
+
 - name: find network config files generated by the bootstrap process
   find:
     path: /etc/systemd/network
diff --git a/networkd/templates/interface.link.j2 b/networkd/templates/interface.link.j2
new file mode 100644
index 0000000..52124d0
--- /dev/null
+++ b/networkd/templates/interface.link.j2
@@ -0,0 +1,9 @@
+[Match]
+{% for key, value in item.1["match"].items()  %}
+{{ key }}={{ value }}
+{% endfor %}
+
+[Link]
+{% for key, value in item.1["link"].items()  %}
+{{ key }}={{ value }}
+{% endfor %}
-- 
GitLab