From a7cda14994d81154d0131b991bfdd90ad2115fdd Mon Sep 17 00:00:00 2001 From: "martin.fencl" Date: Tue, 3 Feb 2026 18:36:09 +0100 Subject: [PATCH] . --- update_semaphore.yml | 54 ++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/update_semaphore.yml b/update_semaphore.yml index f5f62ad..76e69e7 100644 --- a/update_semaphore.yml +++ b/update_semaphore.yml @@ -1,17 +1,15 @@ # update_semaphore.yml -- name: Update Semaphore +- name: Update Semaphore (self-update safe) hosts: pve2_vm gather_facts: false vars: - # Compose sync (controller -> target) compose_local_dir: "{{ playbook_dir }}/docker-compose" compose_remote_base: "/home/{{ ansible_user }}/.ansible-compose" compose_remote_dir: "{{ compose_remote_base }}/docker-compose" compose_remote_archive: "{{ compose_remote_base }}/docker-compose.tar.gz" - # Semaphore settings semaphore_project: semaphore semaphore_compose_filename: "docker-compose-semaphore.yml" semaphore_port: 3000 @@ -21,7 +19,6 @@ ansible.builtin.file: path: "{{ compose_remote_base }}" state: directory - mode: "0755" - name: Create local archive of docker-compose directory (controller) ansible.builtin.archive: @@ -35,7 +32,6 @@ ansible.builtin.copy: src: "/tmp/docker-compose.tar.gz" dest: "{{ compose_remote_archive }}" - mode: "0644" - name: Recreate remote compose directory ansible.builtin.file: @@ -46,7 +42,6 @@ ansible.builtin.file: path: "{{ compose_remote_dir }}" state: directory - mode: "0755" - name: Extract archive on remote host ansible.builtin.unarchive: @@ -55,29 +50,44 @@ remote_src: true - name: Pull latest Semaphore image(s) - community.docker.docker_compose_v2: - project_name: "{{ semaphore_project }}" - project_src: "{{ compose_remote_dir }}" - files: - - "{{ semaphore_compose_filename }}" - pull: always + ansible.builtin.command: + argv: + - bash + - -lc + - > + cd "{{ compose_remote_dir }}" + && docker compose -p "{{ semaphore_project }}" + -f "{{ semaphore_compose_filename }}" + pull + changed_when: true - - name: Recreate Semaphore stack - community.docker.docker_compose_v2: - project_name: "{{ semaphore_project }}" - project_src: "{{ compose_remote_dir }}" - files: - - "{{ semaphore_compose_filename }}" - state: present - recreate: always + - name: Start Semaphore update in background (avoid killing this job) + ansible.builtin.command: + argv: + - bash + - -lc + - > + cd "{{ compose_remote_dir }}" + && nohup docker compose -p "{{ semaphore_project }}" + -f "{{ semaphore_compose_filename }}" + up -d --remove-orphans --force-recreate + > "{{ compose_remote_base }}/semaphore-update.log" 2>&1 & + async: 1 + poll: 0 + changed_when: true - name: Wait for Semaphore port ansible.builtin.wait_for: host: 127.0.0.1 port: "{{ semaphore_port }}" - timeout: 120 + timeout: 300 - - name: Check Semaphore HTTP endpoint + - name: Check Semaphore HTTP endpoint (retry) ansible.builtin.uri: url: "http://127.0.0.1:{{ semaphore_port }}/" status_code: 200 + register: sem_http + retries: 30 + delay: 5 + until: sem_http.status == 200 + changed_when: false