From 95a743ddebcef03c7b2536e24dc9d82c05dad4d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20D=C3=A9siles?= <1536672+cdesiles@users.noreply.github.com> Date: Sat, 4 Jul 2026 00:06:13 +0200 Subject: [PATCH] fix(roles): detect new image on podman pull and restart services Same bug as immich (556fae8): 'Writing manifest' goes to stderr, so changed_when never matched and the restart handlers never fired after image upgrades. Compare local image IDs before/after pull instead, and notify the restart handler only on a genuinely new image. Applies to fdroid, gitea, metabase, ntfy, unifi, uptime-kuma. --- roles/fdroid/tasks/main.yml | 17 +++++++++++++---- roles/gitea/tasks/main.yml | 17 +++++++++++++---- roles/metabase/tasks/main.yml | 17 +++++++++++++---- roles/ntfy/tasks/main.yml | 17 +++++++++++++---- roles/unifi/tasks/main.yml | 17 +++++++++++++---- roles/uptime_kuma/tasks/main.yml | 17 +++++++++++++---- 6 files changed, 78 insertions(+), 24 deletions(-) diff --git a/roles/fdroid/tasks/main.yml b/roles/fdroid/tasks/main.yml index c170218..d5453dd 100644 --- a/roles/fdroid/tasks/main.yml +++ b/roles/fdroid/tasks/main.yml @@ -54,13 +54,22 @@ mode: "0600" notify: Restart fdroid -- name: Pull fdroid container image - ansible.builtin.command: "podman pull {{ fdroid_image }}:{{ fdroid_version }}" - changed_when: pull_result.stdout is search('Writing manifest') - register: pull_result +- name: Get current fdroid image ID + ansible.builtin.command: "podman image inspect --format {% raw %}{{.Id}}{% endraw %} {{ fdroid_image }}:{{ fdroid_version }}" + register: fdroid_image_id_before + failed_when: false # image may not exist yet on first deploy + changed_when: false become: false become_user: "{{ ansible_user }}" +- name: Pull fdroid container image + ansible.builtin.command: "podman pull --quiet {{ fdroid_image }}:{{ fdroid_version }}" + register: pull_result + changed_when: pull_result.stdout != fdroid_image_id_before.stdout + become: false + become_user: "{{ ansible_user }}" + notify: Restart fdroid + - name: Deploy Kubernetes YAML for fdroid ansible.builtin.template: src: fdroid.yaml.j2 diff --git a/roles/gitea/tasks/main.yml b/roles/gitea/tasks/main.yml index 696ab9d..95618e6 100644 --- a/roles/gitea/tasks/main.yml +++ b/roles/gitea/tasks/main.yml @@ -79,13 +79,22 @@ group: "{{ ansible_user }}" mode: "0755" -- name: Pull Gitea container image - ansible.builtin.command: "podman pull {{ gitea_image }}:{{ gitea_version }}" - changed_when: pull_result.stdout is search('Writing manifest') - register: pull_result +- name: Get current gitea image ID + ansible.builtin.command: "podman image inspect --format {% raw %}{{.Id}}{% endraw %} {{ gitea_image }}:{{ gitea_version }}" + register: gitea_image_id_before + failed_when: false # image may not exist yet on first deploy + changed_when: false become: false become_user: "{{ ansible_user }}" +- name: Pull Gitea container image + ansible.builtin.command: "podman pull --quiet {{ gitea_image }}:{{ gitea_version }}" + register: pull_result + changed_when: pull_result.stdout != gitea_image_id_before.stdout + become: false + become_user: "{{ ansible_user }}" + notify: Restart gitea + - name: Deploy Kubernetes YAML for Gitea ansible.builtin.template: src: gitea.yaml.j2 diff --git a/roles/metabase/tasks/main.yml b/roles/metabase/tasks/main.yml index 3532945..7da141a 100644 --- a/roles/metabase/tasks/main.yml +++ b/roles/metabase/tasks/main.yml @@ -51,13 +51,22 @@ group: "{{ ansible_user }}" mode: "0755" -- name: Pull Metabase container image - ansible.builtin.command: "podman pull {{ metabase_image }}:{{ metabase_version }}" - register: pull_result - changed_when: pull_result.stdout is search('Writing manifest') +- name: Get current metabase image ID + ansible.builtin.command: "podman image inspect --format {% raw %}{{.Id}}{% endraw %} {{ metabase_image }}:{{ metabase_version }}" + register: metabase_image_id_before + failed_when: false # image may not exist yet on first deploy + changed_when: false become: false become_user: "{{ ansible_user }}" +- name: Pull Metabase container image + ansible.builtin.command: "podman pull --quiet {{ metabase_image }}:{{ metabase_version }}" + register: pull_result + changed_when: pull_result.stdout != metabase_image_id_before.stdout + become: false + become_user: "{{ ansible_user }}" + notify: Restart Metabase + - name: Deploy Kubernetes YAML for Metabase ansible.builtin.template: src: metabase.yaml.j2 diff --git a/roles/ntfy/tasks/main.yml b/roles/ntfy/tasks/main.yml index 976eda0..f03081f 100644 --- a/roles/ntfy/tasks/main.yml +++ b/roles/ntfy/tasks/main.yml @@ -37,13 +37,22 @@ mode: "0644" notify: Restart ntfy -- name: Pull ntfy container image - ansible.builtin.command: "podman pull {{ ntfy_image }}:{{ ntfy_version }}" - changed_when: pull_result.stdout is search('Writing manifest') - register: pull_result +- name: Get current ntfy image ID + ansible.builtin.command: "podman image inspect --format {% raw %}{{.Id}}{% endraw %} {{ ntfy_image }}:{{ ntfy_version }}" + register: ntfy_image_id_before + failed_when: false # image may not exist yet on first deploy + changed_when: false become: false become_user: "{{ ansible_user }}" +- name: Pull ntfy container image + ansible.builtin.command: "podman pull --quiet {{ ntfy_image }}:{{ ntfy_version }}" + register: pull_result + changed_when: pull_result.stdout != ntfy_image_id_before.stdout + become: false + become_user: "{{ ansible_user }}" + notify: Restart ntfy + - name: Deploy Kubernetes YAML for ntfy ansible.builtin.template: src: ntfy.yaml.j2 diff --git a/roles/unifi/tasks/main.yml b/roles/unifi/tasks/main.yml index 918c599..a1ee6c2 100644 --- a/roles/unifi/tasks/main.yml +++ b/roles/unifi/tasks/main.yml @@ -25,13 +25,22 @@ group: "{{ ansible_user }}" mode: "0755" -- name: Pull UniFi container image - ansible.builtin.command: "podman pull {{ unifi_image }}:{{ unifi_version }}" - changed_when: pull_result.stdout is search('Writing manifest') - register: pull_result +- name: Get current unifi image ID + ansible.builtin.command: "podman image inspect --format {% raw %}{{.Id}}{% endraw %} {{ unifi_image }}:{{ unifi_version }}" + register: unifi_image_id_before + failed_when: false # image may not exist yet on first deploy + changed_when: false become: false become_user: "{{ ansible_user }}" +- name: Pull UniFi container image + ansible.builtin.command: "podman pull --quiet {{ unifi_image }}:{{ unifi_version }}" + register: pull_result + changed_when: pull_result.stdout != unifi_image_id_before.stdout + become: false + become_user: "{{ ansible_user }}" + notify: Restart unifi + - name: Deploy Kubernetes YAML for unifi ansible.builtin.template: src: unifi.yaml.j2 diff --git a/roles/uptime_kuma/tasks/main.yml b/roles/uptime_kuma/tasks/main.yml index f2d9a0c..30f82f8 100644 --- a/roles/uptime_kuma/tasks/main.yml +++ b/roles/uptime_kuma/tasks/main.yml @@ -15,13 +15,22 @@ group: "{{ ansible_user }}" mode: "0755" -- name: Pull Uptime Kuma container image - ansible.builtin.command: "podman pull {{ uptime_kuma_image }}:{{ uptime_kuma_version }}" - changed_when: pull_result.stdout is search('Writing manifest') - register: pull_result +- name: Get current uptime_kuma image ID + ansible.builtin.command: "podman image inspect --format {% raw %}{{.Id}}{% endraw %} {{ uptime_kuma_image }}:{{ uptime_kuma_version }}" + register: uptime_kuma_image_id_before + failed_when: false # image may not exist yet on first deploy + changed_when: false become: false become_user: "{{ ansible_user }}" +- name: Pull Uptime Kuma container image + ansible.builtin.command: "podman pull --quiet {{ uptime_kuma_image }}:{{ uptime_kuma_version }}" + register: pull_result + changed_when: pull_result.stdout != uptime_kuma_image_id_before.stdout + become: false + become_user: "{{ ansible_user }}" + notify: Restart uptime-kuma + - name: Deploy Kubernetes YAML for uptime-kuma ansible.builtin.template: src: uptime-kuma.yaml.j2