1- name: Setup Docker
2  when: ansible_facts.distribution ~ ansible_facts.distribution_major_version not in  ['CentOS6', 'RedHat6']
3  block:
4    - name: Include distribution specific variables
5      include_vars: "{{ lookup('first_found', params) }}"
6      vars:
7        params:
8          files:
9            - "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml"
10            - "{{ ansible_facts.os_family }}-{{ ansible_facts.distribution_major_version }}.yml"
11            - "{{ ansible_facts.distribution }}.yml"
12            - "{{ ansible_facts.os_family }}.yml"
13            - default.yml
14          paths:
15            - "{{ role_path }}/vars"
16
17    - name: Include distribution specific tasks
18      include_tasks: "{{ lookup('first_found', params) }}"
19      vars:
20        params:
21          files:
22            - "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml"
23            - "{{ ansible_facts.os_family }}-{{ ansible_facts.distribution_major_version }}.yml"
24            - "{{ ansible_facts.distribution }}.yml"
25            - "{{ ansible_facts.os_family }}.yml"
26          paths:
27            - "{{ role_path }}/tasks"
28
29    - name: Install Python requirements
30      pip:
31        state: present
32        name: "{{ docker_pip_packages | union(docker_pip_extra_packages) }}"
33        extra_args: "-c {{ remote_constraints }}"
34      notify: cleanup docker
35
36    # Detect docker CLI, API and docker-py versions
37    - name: Check Docker CLI version
38      command: "docker version -f {% raw %}'{{.Client.Version}}'{% endraw %}"
39      register: docker_cli_version_stdout
40      ignore_errors: yes
41
42    - name: Check Docker API version
43      command: "{{ ansible_python.executable }} -c 'import docker; print(docker.from_env().version()[\"ApiVersion\"])'"
44      register: docker_api_version_stdout
45      ignore_errors: yes
46
47    - name: Check docker-py API version
48      command: "{{ ansible_python.executable }} -c 'import docker; print(docker.__version__)'"
49      register: docker_py_version_stdout
50      ignore_errors: yes
51
52    - set_fact:
53        docker_cli_version: "{{ docker_cli_version_stdout.stdout | default('0.0') }}"
54        docker_api_version: "{{ docker_api_version_stdout.stdout | default('0.0') }}"
55        docker_py_version: "{{ docker_py_version_stdout.stdout | default('0.0') }}"
56
57    - debug:
58        msg: "Docker CLI version: {{ docker_cli_version }}; Docker API version: {{ docker_api_version }}; docker-py library version: {{ docker_py_version }}"
59
60    - block:
61      # Cleanup docker daemon
62      - name: "Remove all ansible-test-* docker containers"
63        shell: 'docker ps --no-trunc --format {% raw %}"{{.Names}}"{% endraw %} | grep "^ansible-test-" | xargs -r docker rm -f'
64        register: docker_containers
65        retries: 3
66        delay: 3
67        until: docker_containers is success
68
69      - name: "Remove all ansible-test-* docker volumes"
70        shell: 'docker volume ls --format {% raw %}"{{.Name}}"{% endraw %} | grep "^ansible-test-" | xargs -r docker volume rm -f'
71        register: docker_volumes
72
73      - name: "Remove all ansible-test-* docker networks"
74        shell: 'docker network ls --no-trunc --format {% raw %}"{{.Name}}"{% endraw %} | grep "^ansible-test-" | xargs -r docker network rm'
75        register: docker_networks
76
77      - name: Cleaned docker resources
78        debug:
79          var: docker_resources
80        vars:
81          docker_resources:
82            containers: "{{ docker_containers.stdout_lines }}"
83            volumes: "{{ docker_volumes.stdout_lines }}"
84            networks: "{{ docker_networks.stdout_lines }}"
85
86      # List all existing docker resources
87      - name: List all docker containers
88        command: docker ps --no-trunc -a
89        register: docker_containers
90
91      - name: List all docker volumes
92        command: docker volume ls
93        register: docker_volumes
94
95      - name: List all docker networks
96        command: docker network ls --no-trunc
97        register: docker_networks
98
99      - name: List all docker images
100        command: docker images --no-trunc -a
101        register: docker_images
102
103      - name: Still existing docker resources
104        debug:
105          var: docker_resources
106        vars:
107          docker_resources:
108            containers: "{{ docker_containers.stdout_lines }}"
109            volumes: "{{ docker_volumes.stdout_lines }}"
110            networks: "{{ docker_networks.stdout_lines }}"
111            images: "{{ docker_images.stdout_lines }}"
112
113      when: docker_cli_version is version('0.0', '>')
114