diff --git a/networkd/tasks/main.yml b/networkd/tasks/main.yml
index 60ae00932f92f84b2b60f43ce21654f3c671f9e0..d5d6af7b1580d4e66ec9fd20fb57c93aa6e66ffd 100644
--- a/networkd/tasks/main.yml
+++ b/networkd/tasks/main.yml
@@ -1,5 +1,11 @@
 ---
 
+- name: install systemd-networkd
+  package:
+    name: systemd-networkd
+    state: present
+  when: is_rhel
+
 - name: ensure networkd has a valid configuration
   template:
     src: "20-wired-{{ item.1.type }}.network.j2"
@@ -61,23 +67,30 @@
   when: vlan.type == 'vlan'
 
 - name: ensure networkd is enabled and running
-  service:
-    name: systemd-networkd
+  systemd:
+    name: systemd-networkd.service
     state: started
     enabled: true
 
 - name: ensure legacy methods are disabled
   systemd:
-    name: networking
+    name: "{{ item }}"
     enabled: false
+  loop:
+    - networking.service
+    - NetworkManager.service
+    - NetworkManager-wait-online.service
   ignore_errors: true
 
-- name: ensure legacy methods are really disabled
-  apt:
-    name: ifupdown
+- name: ensure legacy methods are unistalled
+  package:
+    name:
+      - ifupdown
+      - network-manager  # Debian
+      - NetworkManager  # RHEL
     state: absent
 
 - name: ensure we wait for network to be online
-  service:
-    name: systemd-networkd-wait-online
+  systemd:
+    name: systemd-networkd-wait-online.service
     enabled: true