diff --git a/playbooks/roles/nodepool-builder/tasks/main.yaml b/playbooks/roles/nodepool-builder/tasks/main.yaml
index a65cbcdee3..3d51d3e98d 100644
--- a/playbooks/roles/nodepool-builder/tasks/main.yaml
+++ b/playbooks/roles/nodepool-builder/tasks/main.yaml
@@ -40,3 +40,14 @@
   shell:
     cmd: docker-compose up -d
     chdir: /etc/nodepool-builder-compose/
+
+- name: Disable old service
+  service:
+    name: nodepool-builder
+    enabled: no
+  failed_when: false
+
+- name: Remove old init scripts
+  file:
+    state: absent
+    path: /etc/init.d/nodepool-builder
diff --git a/playbooks/roles/nodepool-launcher/tasks/main.yaml b/playbooks/roles/nodepool-launcher/tasks/main.yaml
index 9b0fee0062..85799ea964 100644
--- a/playbooks/roles/nodepool-launcher/tasks/main.yaml
+++ b/playbooks/roles/nodepool-launcher/tasks/main.yaml
@@ -53,3 +53,14 @@
 - name: Start nodepool launcher
   include_tasks: start.yaml
   when: nodepool_launcher_start | bool
+
+- name: Disable old service
+  service:
+    name: nodepool-launcher
+    enabled: no
+  failed_when: false
+
+- name: Remove old init scripts
+  file:
+    state: absent
+    path: /etc/init.d/nodepool-launcher
diff --git a/playbooks/roles/zuul-merger/tasks/main.yaml b/playbooks/roles/zuul-merger/tasks/main.yaml
index 8765ecb4af..0b407ed020 100644
--- a/playbooks/roles/zuul-merger/tasks/main.yaml
+++ b/playbooks/roles/zuul-merger/tasks/main.yaml
@@ -50,3 +50,14 @@
 - name: Start containers
   include_tasks: start.yaml
   when: zuul_merger_start | bool
+
+- name: Disable old service
+  service:
+    name: zuul-merger
+    enabled: no
+  failed_when: false
+
+- name: Remove old init scripts
+  file:
+    state: absent
+    path: /etc/init.d/zuul-merger
diff --git a/playbooks/roles/zuul-scheduler/tasks/main.yaml b/playbooks/roles/zuul-scheduler/tasks/main.yaml
index 86254bc82b..012a43d350 100644
--- a/playbooks/roles/zuul-scheduler/tasks/main.yaml
+++ b/playbooks/roles/zuul-scheduler/tasks/main.yaml
@@ -71,3 +71,14 @@
 - name: Start containers
   include_tasks: start.yaml
   when: zuul_scheduler_start is defined and zuul_scheduler_start | bool
+
+- name: Disable old service
+  service:
+    name: zuul-scheduler
+    enabled: no
+  failed_when: false
+
+- name: Remove old init scripts
+  file:
+    state: absent
+    path: /etc/init.d/zuul-scheduler
diff --git a/playbooks/roles/zuul-web/tasks/main.yaml b/playbooks/roles/zuul-web/tasks/main.yaml
index 67a1349cee..1f1d2a8e06 100644
--- a/playbooks/roles/zuul-web/tasks/main.yaml
+++ b/playbooks/roles/zuul-web/tasks/main.yaml
@@ -99,3 +99,20 @@
 - name: Start containers
   include_tasks: start.yaml
   when: zuul_web_start | bool
+
+- name: Disable old service
+  service:
+    name: 'zuul-{{ item }}'
+    enabled: no
+  failed_when: false
+  loop:
+    - web
+    - fingergw
+
+- name: Remove old init scripts
+  file:
+    state: absent
+    path: '/etc/init.d/zuul-{{ item }}'
+  loop:
+    - web
+    - fingergw