mirror of
https://github.com/ansible-collections/community.docker.git
synced 2025-12-18 04:48:46 +00:00
* Cache has already been updated a few lines before. * When skipping Docker cleanup, create flag to avoid the expensive part of the setup (including package manager cache update) to be run again.
180 lines
7.2 KiB
YAML
180 lines
7.2 KiB
YAML
---
|
|
# Copyright (c) Ansible Project
|
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
####################################################################
|
|
# WARNING: These are designed specifically for Ansible tests #
|
|
# and should not be used as examples of how to write Ansible roles #
|
|
####################################################################
|
|
|
|
- name: Setup Docker
|
|
when: ansible_facts.distribution ~ ansible_facts.distribution_major_version not in ['CentOS6', 'RedHat6']
|
|
block:
|
|
- name: Detect whether we are running inside a container
|
|
current_container_facts:
|
|
|
|
- name: Look for marker whether Docker was already set up
|
|
stat:
|
|
path: /root/community.docker-docker-is-set-up
|
|
register: docker_setup_marker
|
|
|
|
- when: not docker_setup_marker.stat.exists
|
|
block:
|
|
- name: Determine whether Docker Daemon needs to be installed
|
|
set_fact:
|
|
needs_docker_daemon: '{{ not ansible_module_running_in_container }}'
|
|
|
|
- name: Include distribution specific variables
|
|
include_vars: "{{ lookup('first_found', params) }}"
|
|
vars:
|
|
params:
|
|
files:
|
|
- "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml"
|
|
- "{{ ansible_facts.os_family }}-{{ ansible_facts.distribution_major_version }}.yml"
|
|
- "{{ ansible_facts.distribution }}.yml"
|
|
- "{{ ansible_facts.os_family }}.yml"
|
|
- default.yml
|
|
paths:
|
|
- "{{ role_path }}/vars"
|
|
|
|
- name: Include distribution specific tasks
|
|
include_tasks: "{{ lookup('first_found', params) }}"
|
|
vars:
|
|
params:
|
|
files:
|
|
- "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml"
|
|
- "{{ ansible_facts.os_family }}-{{ ansible_facts.distribution_major_version }}.yml"
|
|
- "{{ ansible_facts.distribution }}.yml"
|
|
- "{{ ansible_facts.os_family }}.yml"
|
|
paths:
|
|
- "{{ role_path }}/tasks"
|
|
|
|
- name: Make sure that docker is running
|
|
service:
|
|
name: docker
|
|
state: started
|
|
when: not ansible_module_running_in_container
|
|
|
|
- name: Set marker that Docker was already set up
|
|
file:
|
|
path: /root/community.docker-docker-is-set-up
|
|
state: touch
|
|
when: docker_skip_cleanup
|
|
|
|
# Detect docker API version
|
|
- name: Check Docker API version
|
|
command: "docker version -f {% raw %}'{{(index .Server.Components 0).Details.ApiVersion}}'{% endraw %}"
|
|
register: docker_api_version_stdout
|
|
ignore_errors: yes
|
|
|
|
- name: Limit docker pypi package version to < 4.3.0
|
|
set_fact:
|
|
docker_pip_package_limit: '<4.3.0'
|
|
when: (docker_api_version_stdout.stdout | default('0.0')) is version('1.39', '<')
|
|
|
|
- name: Install/upgrade Python requirements
|
|
pip:
|
|
name: "{{ [docker_pip_package ~ docker_pip_package_limit] + docker_pip_extra_packages }}"
|
|
extra_args: "-c {{ remote_constraints }}"
|
|
state: "{{ 'latest' if force_docker_sdk_for_python_pypi | default(false) else 'present' }}"
|
|
notify: cleanup docker
|
|
|
|
# Detect docker CLI, API and docker-py versions
|
|
- name: Check Docker CLI version
|
|
command: "docker version -f {% raw %}'{{.Client.Version}}'{% endraw %}"
|
|
register: docker_cli_version_stdout
|
|
ignore_errors: yes
|
|
|
|
- name: Check Docker API version
|
|
command: "{{ ansible_python.executable }} -c 'import docker; print(docker.from_env().version()[\"ApiVersion\"])'"
|
|
register: docker_api_version_stdout
|
|
ignore_errors: yes
|
|
|
|
- name: Check docker-py API version
|
|
command: "{{ ansible_python.executable }} -c 'import docker; print(docker.__version__)'"
|
|
register: docker_py_version_stdout
|
|
ignore_errors: yes
|
|
|
|
- set_fact:
|
|
docker_cli_version: "{{ docker_cli_version_stdout.stdout | default('0.0') }}"
|
|
docker_api_version: "{{ docker_api_version_stdout.stdout | default('0.0') }}"
|
|
docker_py_version: "{{ docker_py_version_stdout.stdout | default('0.0') }}"
|
|
|
|
- debug:
|
|
msg: "Docker CLI version: {{ docker_cli_version }}; Docker API version: {{ docker_api_version }}; docker-py library version: {{ docker_py_version }}"
|
|
|
|
- block:
|
|
# Cleanup docker daemon
|
|
- command: 'docker ps --no-trunc --format {% raw %}"{{.Names}}"{% endraw %}'
|
|
|
|
- name: "Remove all ansible-docker-test-* docker containers"
|
|
shell: 'docker ps --no-trunc --format {% raw %}"{{.Names}}"{% endraw %} | grep "^ansible-docker-test-" | xargs -r docker rm -f'
|
|
register: docker_containers
|
|
retries: 3
|
|
delay: 3
|
|
until: docker_containers is success
|
|
ignore_errors: yes
|
|
|
|
- name: "Remove all ansible-docker-test-* docker volumes"
|
|
shell: 'docker volume ls --format {% raw %}"{{.Name}}"{% endraw %} | grep "^ansible-docker-test-" | xargs -r docker volume rm -f'
|
|
register: docker_volumes
|
|
ignore_errors: yes
|
|
|
|
- name: "Remove all ansible-docker-test-* docker networks"
|
|
shell: 'docker network ls --no-trunc --format {% raw %}"{{.Name}}"{% endraw %} | grep "^ansible-docker-test-" | xargs -r docker network rm'
|
|
register: docker_networks
|
|
ignore_errors: yes
|
|
|
|
- name: Cleaned docker resources
|
|
debug:
|
|
var: docker_resources
|
|
vars:
|
|
docker_resources:
|
|
containers: "{{ docker_containers.stdout_lines | default([]) }}"
|
|
volumes: "{{ docker_volumes.stdout_lines | default([]) }}"
|
|
networks: "{{ docker_networks.stdout_lines | default([]) }}"
|
|
|
|
# List all existing docker resources
|
|
- name: List all docker containers
|
|
command: docker ps --no-trunc -a
|
|
register: docker_containers
|
|
ignore_errors: yes
|
|
|
|
- name: List all docker volumes
|
|
command: docker volume ls
|
|
register: docker_volumes
|
|
ignore_errors: yes
|
|
|
|
- name: List all docker networks
|
|
command: docker network ls --no-trunc
|
|
register: docker_networks
|
|
ignore_errors: yes
|
|
|
|
- name: List all docker images
|
|
command: docker images --no-trunc -a
|
|
register: docker_images
|
|
ignore_errors: yes
|
|
|
|
- name: Still existing docker resources
|
|
debug:
|
|
var: docker_resources
|
|
vars:
|
|
docker_resources:
|
|
containers: "{{ docker_containers.stdout_lines | default([]) }}"
|
|
volumes: "{{ docker_volumes.stdout_lines | default([]) }}"
|
|
networks: "{{ docker_networks.stdout_lines | default([]) }}"
|
|
images: "{{ docker_images.stdout_lines | default([]) }}"
|
|
|
|
when: docker_cli_version is version('0.0', '>')
|
|
|
|
- name: Inspect current container
|
|
docker_container_info:
|
|
name: "{{ ansible_module_container_id }}"
|
|
register: current_container_info
|
|
when: ansible_module_running_in_container
|
|
|
|
- name: Determine network name
|
|
set_fact:
|
|
current_container_network_ip: "{{ (current_container_info.container.NetworkSettings.Networks | dictsort)[0].0 | default('') if ansible_module_running_in_container else '' }}"
|