From f4be1ed291048cb60e1162844fe05618072aabbf Mon Sep 17 00:00:00 2001
From: Tobias Jungel <tobias.jungel@gmail.com>
Date: Thu, 8 Apr 2021 00:07:02 +0200
Subject: [PATCH] fix(networkd): use networkctl to reload config changes

---
 systemd/defaults.yaml         |  2 ++
 systemd/networkd/profiles.sls | 14 +++++++++-----
 systemd/networkd/reload.sls   |  9 +++++++++
 systemd/osmap.yaml            |  1 +
 4 files changed, 21 insertions(+), 5 deletions(-)
 create mode 100644 systemd/networkd/reload.sls

diff --git a/systemd/defaults.yaml b/systemd/defaults.yaml
index 3febe6c..4a7e579 100644
--- a/systemd/defaults.yaml
+++ b/systemd/defaults.yaml
@@ -19,6 +19,8 @@ systemd:
       PollIntervalMaxSec: 2048
 
   networkd:
+    # networkctl reload is available since systemd 244
+    networkctl_reload: false
     pkg: {}
     path: /etc/systemd/network
     service: systemd-networkd
diff --git a/systemd/networkd/profiles.sls b/systemd/networkd/profiles.sls
index 478fba7..7c55911 100644
--- a/systemd/networkd/profiles.sls
+++ b/systemd/networkd/profiles.sls
@@ -5,8 +5,10 @@
 {%- set networkd = systemd.get('networkd', {}) %}
 {%- set profiles = networkd.get('profiles', {}) %}
 
+{%- if networkd.networkctl_reload %}
 include:
-  - systemd.reload
+  - systemd.networkd.reload
+{%- endif %}
 
 {% if profiles is mapping %}
 {% for networkdprofile, types in profiles.items()  %}
@@ -23,8 +25,10 @@ include:
     - dir_mode: 755
     - context:
         config: {{ profileconfig|json }}
+{%- if networkd.networkctl_reload %}
     - watch_in:
-      - cmd: reload_systemd_configuration
-  {% endfor %}
-{% endfor %}
-{% endif %}
+      - cmd: systemd-networkd-reload-cmd-wait
+{%- endif %}
+  {%- endfor %}
+{%- endfor %}
+{%- endif %}
diff --git a/systemd/networkd/reload.sls b/systemd/networkd/reload.sls
new file mode 100644
index 0000000..4ee5dd9
--- /dev/null
+++ b/systemd/networkd/reload.sls
@@ -0,0 +1,9 @@
+include:
+  - systemd.networkd
+
+systemd-networkd-reload-cmd-wait:
+  cmd.wait:
+    - name: networkctl reload
+    - runas: root
+    - require:
+      - service: networkd
diff --git a/systemd/osmap.yaml b/systemd/osmap.yaml
index 35f30c1..3269553 100644
--- a/systemd/osmap.yaml
+++ b/systemd/osmap.yaml
@@ -14,6 +14,7 @@ Fedora:
   pkgs_extra:
     - python3-systemd
   networkd:
+    networkctl_reload: true
     pkg: {}
   resolved:
     pkg: {}
-- 
GitLab