--- - name: Update Redis (pull + recreate, same stack) hosts: proxmox become: true vars: nc_container: nextcloud redis_container: redis redis_image: "redis:7-alpine" nc_root: /data/compose/nextcloud tasks: - name: Gather nextcloud container info (to learn project + network) community.docker.docker_container_info: name: "{{ nc_container }}" register: nc_info - name: Derive compose project & network ansible.builtin.set_fact: nc_project: "{{ nc_info.container.Config.Labels['com.docker.compose.project'] | default('nextcloud') }}" nc_net_primary: "{{ (nc_info.container.NetworkSettings.Networks | default({})).keys() | list | first }}" when: nc_info.exists - name: Enable maintenance mode (optional safety) community.docker.docker_container_exec: container: "{{ nc_container }}" user: "www-data" command: php occ maintenance:mode --on ignore_errors: true - name: Render one-off compose for Redis ansible.builtin.copy: dest: /tmp/redis.yml mode: '0644' content: | name: {{ nc_project }} services: redis: image: {{ redis_image }} container_name: {{ redis_container }} restart: unless-stopped networks: [cloud] volumes: - {{ nc_root }}/redis:/data networks: cloud: external: true name: {{ nc_net_primary }} - name: Pull redis image community.docker.docker_compose_v2: project_name: "{{ nc_project }}" files: ["/tmp/redis.yml"] pull: always state: present - name: Recreate redis community.docker.docker_compose_v2: project_name: "{{ nc_project }}" files: ["/tmp/redis.yml"] recreate: always state: present - name: Disable maintenance mode (if we turned it on) community.docker.docker_container_exec: container: "{{ nc_container }}" user: "www-data" command: php occ maintenance:mode --off ignore_errors: true - name: Fire one cron tick (cleanup pending jobs) community.docker.docker_container_exec: container: "{{ nc_container }}" user: "www-data" command: php -f /var/www/html/cron.php