--- - name: Portainer | Create directory if it does not exist. ansible.builtin.file: path: '{{ directories.docker_compose_directory }}' state: directory owner: root group: root mode: 0440 - name: Portainer | Copy docker compose file. ansible.builtin.copy: src: docker-compose.yml dest: '{{ directories.docker_compose_directory }}/docker-compose.yml' owner: root group: root mode: 0440 - name: Portainer | Check if volume exists ansible.builtin.shell: docker volume ls -f name=portainer_portainer_data --format '{{ '{{' }} .Name {{ '}}' }}' register: portainer_volume changed_when: false - name: Portainer | Pull images docker_image: name: '{{ item }}' source: pull with_items: - ubuntu - busybox - name: Docker Volume Backup | Restore Portainer volume from S3 when: (portainer_volume.stdout_lines | length) == 0 docker_container: command: restore-volume --s3 --volume portainer_portainer_data image: ghcr.io/chatton/docker-volume-backup:v0.3.0 name: s3-restore-portainer cleanup: true # delete container after it's done. state: started # container should execute. detach: false # task fails if container exits. volumes: - /var/run/docker.sock:/var/run/docker.sock - /tmp:/tmp # temp s3 archive goes here env: AWS_ACCESS_KEY_ID: '{{ aws_s3.aws_access_key }}' AWS_SECRET_ACCESS_KEY: '{{ aws_s3.aws_secret_key }}' AWS_DEFAULT_REGION: '{{ aws_s3.region }}' AWS_BUCKET: '{{ aws_s3.bucket }}' AWS_ENDPOINT: '{{ aws_s3.s3_url }}' - name: Portainer | Docker compose up community.docker.docker_compose: project_src: '{{ directories.docker_compose_directory }}/portainer'