--- - hosts: all become: true vars: container_name: ansible-deploy-ci-test tasks: - name: Register previous image name for possible fallback shell: "docker ps --filter name=ansible-deploy-ci-test --format='{{json .Image}}'" register: prev - set_fact: prev_image_name="{{ prev.stdout }}" - name: Docker login docker_login: username: "{{ docker_user }}" password: "{{ docker_password }}" registry: "{{ docker_registry }}" - name: Pull app image docker_image: name: "{{ image_name }}" source: pull - name: Stop running container docker_container: name: "{{ container_name }}" image: "{{ image_name }}" state: absent - name: Create app container docker_container: name: "{{ container_name }}" image: "{{ image_name }}" state: started ports: - "80:80" - name: Test app responds on port 80 uri: url: "http://{{ ansible_host }}:80" ignore_errors: True register: result - name: Rollback if app isn't responding docker_container: name: "{{ container_name }}" image: "{{ prev_image_name }}" state: started ports: - "80:80" when: result is failed