From 40802d9d4fb6d9b9be3ce1602e3f7b09f42fe53d Mon Sep 17 00:00:00 2001
From: Tobias Reisinger <tobias@msrg.cc>
Date: Sat, 10 May 2025 00:40:03 +0200
Subject: [PATCH] Refactor docker recreate and rebuild flags

---
 playbooks/roles/_TEMPLATE/handlers/main.yml        |  3 +++
 playbooks/roles/acme_dns/handlers/main.yml         |  3 +++
 playbooks/roles/acme_dns/tasks/main.yml            |  7 +------
 playbooks/roles/caddy/handlers/main.yml            |  5 +++++
 playbooks/roles/caddy/tasks/main.yml               |  7 +------
 playbooks/roles/forgejo/handlers/main.yml          |  3 +++
 playbooks/roles/forgejo/tasks/main.yml             | 14 ++------------
 playbooks/roles/gatus/handlers/main.yml            |  3 +++
 playbooks/roles/gatus/tasks/main.yml               |  7 +------
 playbooks/roles/influxdb/handlers/main.yml         |  3 +++
 playbooks/roles/influxdb/tasks/main.yml            |  7 +------
 playbooks/roles/lgtm_stack/handlers/main.yml       |  3 +++
 playbooks/roles/lgtm_stack/tasks/main.yml          | 14 ++------------
 .../roles/reitanlage_oranienburg/handlers/main.yml |  5 +++++
 .../roles/reitanlage_oranienburg/tasks/main.yml    |  7 +------
 .../roles/teamspeak_fallback/handlers/main.yml     |  3 +++
 playbooks/roles/teamspeak_fallback/tasks/main.yml  |  7 +------
 playbooks/roles/vikunja/handlers/main.yml          |  3 +++
 playbooks/roles/vikunja/tasks/main.yml             |  7 +------
 playbooks/tasks/rebuild-service.yml                |  7 +++++++
 playbooks/tasks/restart-service.yml                |  7 +++++++
 playbooks/tasks/set-default-facts.yml              |  2 --
 playbooks/tasks/steps/start-service.yml            | 13 +------------
 playbooks/tasks/steps/template-site-config.yml     |  3 +--
 24 files changed, 61 insertions(+), 82 deletions(-)
 create mode 100644 playbooks/roles/_TEMPLATE/handlers/main.yml
 create mode 100644 playbooks/roles/acme_dns/handlers/main.yml
 create mode 100644 playbooks/roles/caddy/handlers/main.yml
 create mode 100644 playbooks/roles/forgejo/handlers/main.yml
 create mode 100644 playbooks/roles/gatus/handlers/main.yml
 create mode 100644 playbooks/roles/influxdb/handlers/main.yml
 create mode 100644 playbooks/roles/lgtm_stack/handlers/main.yml
 create mode 100644 playbooks/roles/reitanlage_oranienburg/handlers/main.yml
 create mode 100644 playbooks/roles/teamspeak_fallback/handlers/main.yml
 create mode 100644 playbooks/roles/vikunja/handlers/main.yml
 create mode 100644 playbooks/tasks/rebuild-service.yml
 create mode 100644 playbooks/tasks/restart-service.yml

diff --git a/playbooks/roles/_TEMPLATE/handlers/main.yml b/playbooks/roles/_TEMPLATE/handlers/main.yml
new file mode 100644
index 0000000..4ff0834
--- /dev/null
+++ b/playbooks/roles/_TEMPLATE/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: Restart service {{ role_name }}
+  ansible.builtin.include_tasks: tasks/restart-service.yml
diff --git a/playbooks/roles/acme_dns/handlers/main.yml b/playbooks/roles/acme_dns/handlers/main.yml
new file mode 100644
index 0000000..4ff0834
--- /dev/null
+++ b/playbooks/roles/acme_dns/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: Restart service {{ role_name }}
+  ansible.builtin.include_tasks: tasks/restart-service.yml
diff --git a/playbooks/roles/acme_dns/tasks/main.yml b/playbooks/roles/acme_dns/tasks/main.yml
index 64fd64e..2056c49 100644
--- a/playbooks/roles/acme_dns/tasks/main.yml
+++ b/playbooks/roles/acme_dns/tasks/main.yml
@@ -26,12 +26,7 @@
         src: config.cfg.j2
         dest: "{{ (config_path, 'config.cfg') | path_join }}"
         mode: "0600"
-      register: cmd_result
-
-    - name: Set the docker force-recreate flag
-      ansible.builtin.set_fact:
-        docker_force_recreate: --force-recreate
-      when: cmd_result.changed # noqa: no-handler We need to handle the restart per service. Handlers don't support variables.
+      notify: Restart service {{ role_name }}
 
     - name: Import start tasks for common service
       ansible.builtin.import_tasks: tasks/start-common-service.yml
diff --git a/playbooks/roles/caddy/handlers/main.yml b/playbooks/roles/caddy/handlers/main.yml
new file mode 100644
index 0000000..015591b
--- /dev/null
+++ b/playbooks/roles/caddy/handlers/main.yml
@@ -0,0 +1,5 @@
+---
+- name: Restart service {{ role_name }}
+  ansible.builtin.include_tasks: tasks/restart-service.yml
+- name: Rebuild service {{ role_name }}
+  ansible.builtin.include_tasks: tasks/rebuild-service.yml
diff --git a/playbooks/roles/caddy/tasks/main.yml b/playbooks/roles/caddy/tasks/main.yml
index 8a0eb86..79532fc 100644
--- a/playbooks/roles/caddy/tasks/main.yml
+++ b/playbooks/roles/caddy/tasks/main.yml
@@ -15,12 +15,7 @@
         src: Dockerfile
         dest: "{{ (service_path, 'Dockerfile') | path_join }}"
         mode: "0644"
-      register: cmd_result
-
-    - name: Set the docker rebuild flag
-      ansible.builtin.set_fact:
-        docker_rebuild: true
-      when: cmd_result.changed # noqa: no-handler We need to handle the restart per service. Handlers don't support variables.
+      notify: Rebuild service {{ role_name }}
 
     - name: Set caddy config path
       ansible.builtin.set_fact:
diff --git a/playbooks/roles/forgejo/handlers/main.yml b/playbooks/roles/forgejo/handlers/main.yml
new file mode 100644
index 0000000..4ff0834
--- /dev/null
+++ b/playbooks/roles/forgejo/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: Restart service {{ role_name }}
+  ansible.builtin.include_tasks: tasks/restart-service.yml
diff --git a/playbooks/roles/forgejo/tasks/main.yml b/playbooks/roles/forgejo/tasks/main.yml
index c154ff0..af16e16 100644
--- a/playbooks/roles/forgejo/tasks/main.yml
+++ b/playbooks/roles/forgejo/tasks/main.yml
@@ -16,24 +16,14 @@
         src: templates/
         dest: "{{ (service_path, 'templates') | path_join }}"
         mode: "0644"
-      register: cmd_result
-
-    - name: Set the docker force-recreate flag
-      ansible.builtin.set_fact:
-        docker_force_recreate: --force-recreate
-      when: cmd_result.changed # noqa: no-handler We need to handle the restart per service. Handlers don't support variables.
+      notify: Restart service {{ role_name }}
 
     - name: Template the custom footer
       ansible.builtin.template:
         src: footer.tmpl.j2
         dest: "{{ (service_path, 'templates', 'custom', 'footer.tmpl') | path_join }}"
         mode: "0644"
-      register: cmd_result
-
-    - name: Set the docker force-recreate flag
-      ansible.builtin.set_fact:
-        docker_force_recreate: --force-recreate
-      when: cmd_result.changed # noqa: no-handler We need to handle the restart per service. Handlers don't support variables.
+      notify: Restart service {{ role_name }}
 
     - name: Import start tasks for common service
       ansible.builtin.import_tasks: tasks/start-common-service.yml
diff --git a/playbooks/roles/gatus/handlers/main.yml b/playbooks/roles/gatus/handlers/main.yml
new file mode 100644
index 0000000..4ff0834
--- /dev/null
+++ b/playbooks/roles/gatus/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: Restart service {{ role_name }}
+  ansible.builtin.include_tasks: tasks/restart-service.yml
diff --git a/playbooks/roles/gatus/tasks/main.yml b/playbooks/roles/gatus/tasks/main.yml
index 2b47fe2..278f461 100644
--- a/playbooks/roles/gatus/tasks/main.yml
+++ b/playbooks/roles/gatus/tasks/main.yml
@@ -16,12 +16,7 @@
         src: yml.j2
         dest: "{{ (service_path, 'config.yaml') | path_join }}"
         mode: "0644"
-      register: cmd_result
-
-    - name: Set the docker force-recreate flag
-      ansible.builtin.set_fact:
-        docker_force_recreate: --force-recreate
-      when: cmd_result.changed # noqa: no-handler We need to handle the restart per service. Handlers don't support variables.
+      notify: Restart service {{ role_name }}
 
     - name: Import start tasks for common service
       ansible.builtin.import_tasks: tasks/start-common-service.yml
diff --git a/playbooks/roles/influxdb/handlers/main.yml b/playbooks/roles/influxdb/handlers/main.yml
new file mode 100644
index 0000000..4ff0834
--- /dev/null
+++ b/playbooks/roles/influxdb/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: Restart service {{ role_name }}
+  ansible.builtin.include_tasks: tasks/restart-service.yml
diff --git a/playbooks/roles/influxdb/tasks/main.yml b/playbooks/roles/influxdb/tasks/main.yml
index 487ec1b..d282b1b 100644
--- a/playbooks/roles/influxdb/tasks/main.yml
+++ b/playbooks/roles/influxdb/tasks/main.yml
@@ -17,12 +17,7 @@
         src: yml.j2
         dest: "{{ (service_path, 'influxdb.yml') | path_join }}"
         mode: "0600"
-      register: cmd_result
-
-    - name: Set the docker force-recreate flag
-      ansible.builtin.set_fact:
-        docker_force_recreate: --force-recreate
-      when: cmd_result.changed # noqa: no-handler We need to handle the restart per service. Handlers don't support variables.
+      notify: Restart service {{ role_name }}
 
     - name: Import start tasks for common service
       ansible.builtin.import_tasks: tasks/start-common-service.yml
diff --git a/playbooks/roles/lgtm_stack/handlers/main.yml b/playbooks/roles/lgtm_stack/handlers/main.yml
new file mode 100644
index 0000000..4ff0834
--- /dev/null
+++ b/playbooks/roles/lgtm_stack/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: Restart service {{ role_name }}
+  ansible.builtin.include_tasks: tasks/restart-service.yml
diff --git a/playbooks/roles/lgtm_stack/tasks/main.yml b/playbooks/roles/lgtm_stack/tasks/main.yml
index 7d82a15..2ac0538 100644
--- a/playbooks/roles/lgtm_stack/tasks/main.yml
+++ b/playbooks/roles/lgtm_stack/tasks/main.yml
@@ -19,12 +19,7 @@
         src: config.alloy.j2
         dest: "{{ (service_path, 'config.alloy') | path_join }}"
         mode: "0644"
-      register: cmd_result
-
-    - name: Set the docker force-recreate flag
-      ansible.builtin.set_fact:
-        docker_force_recreate: --force-recreate
-      when: cmd_result.changed # noqa: no-handler We need to handle the restart per service. Handlers don't support variables.
+      notify: Restart service {{ role_name }}
 
     - name: Template mimir config file
       ansible.builtin.template:
@@ -33,12 +28,7 @@
         mode: "0644"
       vars:
         yml: "{{ lgtm_stack_mimir_yml }}"
-      register: cmd_result
-
-    - name: Set the docker force-recreate flag
-      ansible.builtin.set_fact:
-        docker_force_recreate: --force-recreate
-      when: cmd_result.changed # noqa: no-handler We need to handle the restart per service. Handlers don't support variables.
+      notify: Restart service {{ role_name }}
 
     - name: Import start tasks for common service
       ansible.builtin.import_tasks: tasks/start-common-service.yml
diff --git a/playbooks/roles/reitanlage_oranienburg/handlers/main.yml b/playbooks/roles/reitanlage_oranienburg/handlers/main.yml
new file mode 100644
index 0000000..015591b
--- /dev/null
+++ b/playbooks/roles/reitanlage_oranienburg/handlers/main.yml
@@ -0,0 +1,5 @@
+---
+- name: Restart service {{ role_name }}
+  ansible.builtin.include_tasks: tasks/restart-service.yml
+- name: Rebuild service {{ role_name }}
+  ansible.builtin.include_tasks: tasks/rebuild-service.yml
diff --git a/playbooks/roles/reitanlage_oranienburg/tasks/main.yml b/playbooks/roles/reitanlage_oranienburg/tasks/main.yml
index ba38e99..7d1fc1e 100644
--- a/playbooks/roles/reitanlage_oranienburg/tasks/main.yml
+++ b/playbooks/roles/reitanlage_oranienburg/tasks/main.yml
@@ -15,12 +15,7 @@
         url: https://raw.githubusercontent.com/getgrav/docker-grav/master/Dockerfile
         dest: "{{ (service_path, 'Dockerfile') | path_join }}"
         mode: "0644"
-      register: cmd_result
-
-    - name: Set the docker rebuild flag
-      ansible.builtin.set_fact:
-        docker_rebuild: true
-      when: cmd_result.changed # noqa: no-handler We need to handle the restart per service. Handlers don't support variables.
+      notify: Rebuild service {{ role_name }}
 
     - name: Import start tasks for common service
       ansible.builtin.import_tasks: tasks/start-common-service.yml
diff --git a/playbooks/roles/teamspeak_fallback/handlers/main.yml b/playbooks/roles/teamspeak_fallback/handlers/main.yml
new file mode 100644
index 0000000..4ff0834
--- /dev/null
+++ b/playbooks/roles/teamspeak_fallback/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: Restart service {{ role_name }}
+  ansible.builtin.include_tasks: tasks/restart-service.yml
diff --git a/playbooks/roles/teamspeak_fallback/tasks/main.yml b/playbooks/roles/teamspeak_fallback/tasks/main.yml
index 84b1823..985ebd5 100644
--- a/playbooks/roles/teamspeak_fallback/tasks/main.yml
+++ b/playbooks/roles/teamspeak_fallback/tasks/main.yml
@@ -33,12 +33,7 @@
         src: yml.j2
         dest: "{{ (config_path, 'hooks.yml') | path_join }}"
         mode: "0644"
-      register: cmd_result
-
-    - name: Set the docker force-recreate flag
-      ansible.builtin.set_fact:
-        docker_force_recreate: --force-recreate
-      when: cmd_result.changed # noqa: no-handler We need to handle the restart per service. Handlers don't support variables.
+      notify: Restart service {{ role_name }}
 
     - name: Copy the teamspeak-fallback-db script
       ansible.builtin.copy:
diff --git a/playbooks/roles/vikunja/handlers/main.yml b/playbooks/roles/vikunja/handlers/main.yml
new file mode 100644
index 0000000..4ff0834
--- /dev/null
+++ b/playbooks/roles/vikunja/handlers/main.yml
@@ -0,0 +1,3 @@
+---
+- name: Restart service {{ role_name }}
+  ansible.builtin.include_tasks: tasks/restart-service.yml
diff --git a/playbooks/roles/vikunja/tasks/main.yml b/playbooks/roles/vikunja/tasks/main.yml
index 74ab7ad..ad71ddc 100644
--- a/playbooks/roles/vikunja/tasks/main.yml
+++ b/playbooks/roles/vikunja/tasks/main.yml
@@ -16,12 +16,7 @@
         src: yml.j2
         dest: "{{ (service_path, 'config.yml') | path_join }}"
         mode: "0644"
-      register: cmd_result
-
-    - name: Set the docker force-recreate flag
-      ansible.builtin.set_fact:
-        docker_force_recreate: --force-recreate
-      when: cmd_result.changed # noqa: no-handler We need to handle the restart per service. Handlers don't support variables.
+      notify: Restart service {{ role_name }}
 
     - name: Import start tasks for common service
       ansible.builtin.import_tasks: tasks/start-common-service.yml
diff --git a/playbooks/tasks/rebuild-service.yml b/playbooks/tasks/rebuild-service.yml
new file mode 100644
index 0000000..227677d
--- /dev/null
+++ b/playbooks/tasks/rebuild-service.yml
@@ -0,0 +1,7 @@
+---
+- name: Rebuild service {{ role_name }}
+  ansible.builtin.command:
+    cmd: docker compose build --pull
+    chdir: "{{ (services_path, role_name) | path_join }}"
+  changed_when: true
+  notify: Restart service {{ role_name }}
diff --git a/playbooks/tasks/restart-service.yml b/playbooks/tasks/restart-service.yml
new file mode 100644
index 0000000..4345c60
--- /dev/null
+++ b/playbooks/tasks/restart-service.yml
@@ -0,0 +1,7 @@
+---
+- name: "Restart service {{ role_name }}"
+  ansible.builtin.command:
+    cmd: docker compose up -d --force-recreate
+    chdir: "{{ (services_path, role_name) | path_join }}"
+  when: "'local-dev' != inventory_hostname"
+  changed_when: true
diff --git a/playbooks/tasks/set-default-facts.yml b/playbooks/tasks/set-default-facts.yml
index 1951e24..9cb9c8e 100644
--- a/playbooks/tasks/set-default-facts.yml
+++ b/playbooks/tasks/set-default-facts.yml
@@ -2,5 +2,3 @@
 - name: Set common facts
   ansible.builtin.set_fact:
     service_path: "{{ (services_path, role_name) | path_join }}"
-    docker_force_recreate: ""
-    docker_rebuild: false
diff --git a/playbooks/tasks/steps/start-service.yml b/playbooks/tasks/steps/start-service.yml
index 90f4d57..282484f 100644
--- a/playbooks/tasks/steps/start-service.yml
+++ b/playbooks/tasks/steps/start-service.yml
@@ -1,13 +1,4 @@
 ---
-- name: Rebuild service
-  ansible.builtin.command:
-    cmd: docker compose build --pull
-    chdir: "{{ service_path }}"
-  when:
-    - docker_rebuild
-  register: cmd_result
-  changed_when: true
-
 - name: Build service
   ansible.builtin.command:
     cmd: docker compose build --pull
@@ -16,7 +7,6 @@
     - "'local-dev' != inventory_hostname"
     - docker_update is defined
     - docker_update
-  register: cmd_result
   changed_when: true
 
 - name: Pull service
@@ -27,12 +17,11 @@
     - "'local-dev' != inventory_hostname"
     - docker_update is defined
     - docker_update
-  register: cmd_result
   changed_when: true
 
 - name: Start service
   ansible.builtin.command:
-    cmd: docker compose up -d {{ docker_force_recreate }}
+    cmd: docker compose up -d
     chdir: "{{ service_path }}"
   when: "'local-dev' != inventory_hostname"
   register: cmd_result
diff --git a/playbooks/tasks/steps/template-site-config.yml b/playbooks/tasks/steps/template-site-config.yml
index 50ccb5d..b11a9f2 100644
--- a/playbooks/tasks/steps/template-site-config.yml
+++ b/playbooks/tasks/steps/template-site-config.yml
@@ -4,5 +4,4 @@
     src: caddy_site.conf.j2
     dest: "{{ (caddy_config_path, role_name + '.conf') | path_join }}"
     mode: "0644"
-  notify:
-    - Reload caddy
+  notify: Reload caddy