diff --git a/playbooks/tasks/include/post-upgrade/borg-clients.yml b/playbooks/tasks/include/post-upgrade/borg-clients.yml
new file mode 100644
index 0000000000000000000000000000000000000000..883fd50748370e1c7c9ee2e7ba626ad2aeb5d5e2
--- /dev/null
+++ b/playbooks/tasks/include/post-upgrade/borg-clients.yml
@@ -0,0 +1,7 @@
+- name: Check if /backup exists
+  stat: path=/backup
+  register: backup_mountdir
+
+- name: Abort reboot when borg backup is running
+  meta: end_host
+  when: backup_mountdir.stat.exists
diff --git a/playbooks/tasks/include/post-upgrade/build.archlinux.org.yml b/playbooks/tasks/include/post-upgrade/build.archlinux.org.yml
new file mode 100644
index 0000000000000000000000000000000000000000..0277c0971ac5b6be47d4516706fd7534410930cc
--- /dev/null
+++ b/playbooks/tasks/include/post-upgrade/build.archlinux.org.yml
@@ -0,0 +1,8 @@
+- name: List build-related processes
+  command: pgrep -x 'mkarchroot|makechrootpkg|systemd-nspawn'
+  register: pgrep
+  ignore_errors: true
+
+- name: Abort reboot with running builds
+  meta: end_host
+  when: pgrep is succeeded
diff --git a/playbooks/tasks/include/post-upgrade/gemini.archlinux.org.yml b/playbooks/tasks/include/post-upgrade/gemini.archlinux.org.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d6ce08a3efbb74bfb05894d219b7b68ce97910
--- /dev/null
+++ b/playbooks/tasks/include/post-upgrade/gemini.archlinux.org.yml
@@ -0,0 +1,17 @@
+- name: List logged on users
+  command: who
+  register: who
+
+- name: Abort reboot with logged on users
+  meta: end_host
+  when:
+    - who is changed
+    - who.stdout_lines|length > 1
+
+- name: Stop arch-svntogit.timer
+  service: name=arch-svntogit.timer state=stopped
+
+- name: Wait for svntogit to finish
+  wait_for:
+    path: /srv/svntogit/update-repos.sh.lock
+    state: absent
diff --git a/playbooks/tasks/include/upgrade-server.yml b/playbooks/tasks/include/upgrade-server.yml
index f29270dd1c26a038e212e3d2f6772f069ee7be34..3efd2aaf9400c40f7e8099e1a334a467cb35705c 100644
--- a/playbooks/tasks/include/upgrade-server.yml
+++ b/playbooks/tasks/include/upgrade-server.yml
@@ -13,50 +13,17 @@
   meta: end_host
   when: pacman_upgrade is not changed
 
-- name: Check for running builds
-  block:
-    - name: List build-related processes
-      command: pgrep -x 'mkarchroot|makechrootpkg|systemd-nspawn'
-      register: pgrep
-      ignore_errors: true
-
-    - name: Abort reboot with running builds
-      meta: end_host
-      when: pgrep is succeeded
-  when: "'buildservers' in group_names"
-
-
-- name: Check for active borg backup jobs
-  block:
-    - name: Check if /backup exists
-      stat: path=/backup
-      register: backup_mountdir
-
-    - name: Abort reboot when borg backup is running
-      meta: end_host
-      when: backup_mountdir.stat.exists
+- name: Run borg client post-upgrade tasks
+  include_tasks: include/post-upgrade/borg-clients.yml
   when: "'borg_clients' in group_names"
 
-- name: Gemini pre-reboot checks
-  block:
-    - name: List logged on users
-      command: who
-      register: who
-
-    - name: Abort reboot with logged on users
-      meta: end_host
-      when:
-        - who is changed
-        - who.stdout_lines|length > 1
-
-    - name: Stop arch-svntogit.timer
-      service: name=arch-svntogit.timer state=stopped
+- name: Check for host-specific post-upgrade tasks
+  local_action: stat path=include/post-upgrade/{{ inventory_hostname }}.yml
+  register: post_upgrade_tasks
 
-    - name: Wait for svntogit to finish
-      wait_for:
-        path: /srv/svntogit/update-repos.sh.lock
-        state: absent
-  when: inventory_hostname == "gemini.archlinux.org"
+- name: Run host-specific post-upgrade tasks
+  include_tasks: "{{ post_upgrade_tasks.stat.path }}"
+  when: post_upgrade_tasks.stat.exists
 
 - name: Reboot
   reboot: