# update_jellyfin.yml - name: Update Jellyfin hosts: pve2_lxc_jellyfin 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" # Jellyfin settings jellyfin_project: jellyfin jellyfin_compose_filename: "docker-compose-jellyfin.yml" jellyfin_service: jellyfin jellyfin_port: 8096 tasks: - name: Ensure remote base directory exists ansible.builtin.file: path: "{{ compose_remote_base }}" state: directory mode: "0755" - name: Create local archive of docker-compose directory (controller) ansible.builtin.archive: path: "{{ compose_local_dir }}/" dest: "/tmp/docker-compose.tar.gz" format: gz delegate_to: localhost run_once: true - name: Upload archive to remote host ansible.builtin.copy: src: "/tmp/docker-compose.tar.gz" dest: "{{ compose_remote_archive }}" mode: "0644" - name: Recreate remote compose directory ansible.builtin.file: path: "{{ compose_remote_dir }}" state: absent - name: Ensure remote compose directory exists ansible.builtin.file: path: "{{ compose_remote_dir }}" state: directory mode: "0755" - name: Extract archive on remote host ansible.builtin.unarchive: src: "{{ compose_remote_archive }}" dest: "{{ compose_remote_dir }}" remote_src: true - name: Pull latest Jellyfin image community.docker.docker_compose_v2: project_name: "{{ jellyfin_project }}" project_src: "{{ compose_remote_dir }}" files: - "{{ jellyfin_compose_filename }}" pull: always # become: true # uncomment if your ansible user cannot access Docker - name: Recreate Jellyfin service community.docker.docker_compose_v2: project_name: "{{ jellyfin_project }}" project_src: "{{ compose_remote_dir }}" files: - "{{ jellyfin_compose_filename }}" services: - "{{ jellyfin_service }}" state: present recreate: always # become: true # uncomment if needed - name: Wait for Jellyfin port ansible.builtin.wait_for: host: 127.0.0.1 port: "{{ jellyfin_port }}" timeout: 120 - name: Check Jellyfin HTTP endpoint (retry until ready) ansible.builtin.uri: url: "http://127.0.0.1:{{ jellyfin_port }}/" status_code: - 200 - 302 register: jellyfin_http retries: 40 delay: 3 until: jellyfin_http.status in [200, 302] changed_when: false