--- - name: Deploy 4K arr instances (radarr-4k, sonarr-4k) on media-server hosts: media-server become: true vars: app_dir: /home/tommy/arrs-4k tasks: - name: Create arrs-4k directories ansible.builtin.file: path: "{{ item }}" state: directory owner: tommy group: tommy mode: "0755" loop: - "{{ app_dir }}" - "{{ app_dir }}/radarr-4k" - "{{ app_dir }}/sonarr-4k" - name: Write docker-compose.yml ansible.builtin.copy: dest: "{{ app_dir }}/docker-compose.yml" owner: tommy group: tommy mode: "0644" content: | # 4K Quality-First arr instances — SEPARATE from the untouched 1080p stack. # Host: media-server (.183). Shares /mnt/media/data -> /data (single hardlink tree). # Roots: radarr-4k -> /data/media/movies-4k ; sonarr-4k -> /data/media/tv-4k # Routing: Traefik FILE provider on node01 dynamic_conf.yml (NO docker labels): # radarr-4k.goattw.net -> 192.168.99.183:7879 ; sonarr-4k.goattw.net -> 192.168.99.183:8990 # middlewares: secure-headers@file, authelia-auth@file, crowdsec-bouncer@file # Tdarr does NOT watch movies-4k/tv-4k (quality-first keeps the grabbed file). services: radarr-4k: image: lscr.io/linuxserver/radarr:latest container_name: radarr-4k mem_limit: 1g cpus: 1.0 environment: - PUID=1000 - PGID=1000 - TZ=America/Chicago networks: - traefik_public volumes: - ./radarr-4k:/config - /mnt/media/data:/data ports: - "7879:7878/tcp" restart: unless-stopped sonarr-4k: image: lscr.io/linuxserver/sonarr:latest container_name: sonarr-4k mem_limit: 1g cpus: 1.0 environment: - PUID=1000 - PGID=1000 - TZ=America/Chicago networks: - traefik_public volumes: - ./sonarr-4k:/config - /mnt/media/data:/data ports: - "8990:8989/tcp" restart: unless-stopped networks: traefik_public: external: true - name: Deploy 4K arrs with docker compose community.docker.docker_compose_v2: project_src: "{{ app_dir }}" state: present pull: missing register: r - name: Result ansible.builtin.debug: msg: "arrs-4k {{ 'running (changed)' if r.changed else 'already up (no-op)' }}"