Improve setup_docker tests to work with RHEL 8 GA (#58649)

- use include_vars to set appropriate packages and pip packages per distribution and version
- install an older version of Docker CE on RHEL 8 since a dependency is unavailable
- disable warnings on tasks that are ok
- skip tests for CentOS/RHEL 6
This commit is contained in:
Sam Doran 2019-07-03 14:24:24 -04:00 committed by GitHub
parent ce79c8eb27
commit d50c8c2b83
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 101 additions and 47 deletions

View file

@ -0,0 +1,10 @@
docker_cli_version: '0.0'
docker_api_version: '0.0'
docker_py_version: '0.0'
docker_prereq_packages: []
docker_packages:
- docker-ce
docker_pip_extra_packages: []
docker_pip_packages:
- docker

View file

@ -4,14 +4,9 @@
- name: Install pre-reqs - name: Install pre-reqs
apt: apt:
name: "{{ item }}" name: "{{ docker_prereq_packages }}"
state: present state: present
update_cache: yes update_cache: yes
with_items:
- apt-transport-https
- ca-certificates
- curl
- software-properties-common
- name: Add gpg key - name: Add gpg key
shell: curl -fsSL https://download.docker.com/linux/ubuntu/gpg >key && apt-key add key shell: curl -fsSL https://download.docker.com/linux/ubuntu/gpg >key && apt-key add key
@ -30,7 +25,7 @@
- name: Install Docker CE - name: Install Docker CE
apt: apt:
name: docker-ce name: "{{ docker_packages }}"
state: present state: present
update_cache: yes update_cache: yes
always: always:

View file

@ -1,18 +1,20 @@
- name: Install Docker pre-reqs - name: Install Docker pre-reqs
dnf: dnf:
name: "{{ item }}" name: "{{ docker_prereq_packages }}"
state: present state: present
loop:
- dnf-plugins-core
- name: Add repository - name: Add repository
command: dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo command: dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
args:
warn: no
- name: Update cache - name: Update cache
command: dnf makecache command: dnf makecache
args:
warn: no
- name: Install docker - name: Install docker
dnf: dnf:
name: docker-ce name: "{{ docker_packages }}"
state: present state: present
enablerepo: docker-ce-test enablerepo: docker-ce-test

View file

@ -3,13 +3,8 @@
- name: Install Docker pre-reqs - name: Install Docker pre-reqs
yum: yum:
name: "{{ item }}" name: "{{ docker_prereq_packages }}"
state: present state: present
loop:
- yum-utils
- device-mapper-persistent-data
- lvm2
- libseccomp
- name: Install epel repo which is missing on rhel-7 and is needed for pigz (needed for docker-ce 18) - name: Install epel repo which is missing on rhel-7 and is needed for pigz (needed for docker-ce 18)
include_role: include_role:
@ -17,16 +12,22 @@
- name: Enable extras repository for RHEL on AWS - name: Enable extras repository for RHEL on AWS
command: yum-config-manager --enable rhui-REGION-rhel-server-extras command: yum-config-manager --enable rhui-REGION-rhel-server-extras
args:
warn: no
- name: Add repository - name: Add repository
command: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo command: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
args:
warn: no
- name: Update cache - name: Update cache
command: yum -y makecache fast command: yum -y makecache fast
args:
warn: no
- name: Install docker - name: Install docker
yum: yum:
name: docker-ce name: "{{ docker_packages }}"
state: present state: present
- name: Make sure the docker daemon is running (failure expected inside docker container) - name: Make sure the docker daemon is running (failure expected inside docker container)

View file

@ -3,19 +3,17 @@
- name: Install Docker pre-reqs - name: Install Docker pre-reqs
dnf: dnf:
name: name: "{{ docker_prereq_packages }}"
- dnf-utils
- device-mapper-persistent-data
- lvm2
- libseccomp
state: present state: present
- name: Set-up repository - name: Set-up repository
command: dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo command: dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
args:
warn: no
- name: Install docker - name: Install docker
dnf: dnf:
name: docker-ce name: "{{ docker_packages }}"
state: present state: present
- name: Make sure the docker daemon is running (failure expected inside docker container) - name: Make sure the docker daemon is running (failure expected inside docker container)

View file

@ -1,6 +1,6 @@
- name: Install docker 17 - name: Install docker 17
zypper: zypper:
name: docker>=17 name: "{{ docker_packages }}"
force: yes force: yes
disable_gpg_check: yes disable_gpg_check: yes
update_cache: yes update_cache: yes

View file

@ -1,28 +1,35 @@
- vars: - name: Setup Docker
is_rhel: "{{ ansible_os_family == 'RedHat' and ansible_distribution != 'Fedora' }}" when: ansible_facts.distribution ~ ansible_facts.distribution_major_version not in ['CentOS6', 'RedHat6']
is_rhel6: "{{ is_rhel and ansible_distribution_major_version == '6' }}"
is_rhel7: "{{ is_rhel and ansible_distribution_major_version == '7' }}"
is_rhel8: "{{ is_rhel and ansible_distribution_major_version == '8' }}"
is_ubuntu14: "{{ ansible_distribution == 'Ubuntu' and ansible_distribution_major_version == '14' }}"
block: block:
- include_tasks: "{{ lookup('first_found', params) }}" - name: Include distribution specific variables
include_vars: "{{ lookup('first_found', params) }}"
vars: vars:
params: params:
- '{{ ansible_distribution }}.yml' files:
- '{{ ansible_os_family }}.yml' - "{{ ansible_facts.distribution }}-{{ ansible_facts.distribution_major_version }}.yml"
when: not is_rhel6 and not is_rhel8 - "{{ ansible_facts.os_family }}-{{ ansible_facts.distribution_major_version }}.yml"
- include_tasks: RHEL8.yml - "{{ ansible_facts.distribution }}.yml"
when: is_rhel8 - "{{ ansible_facts.os_family }}.yml"
- default.yml
paths:
- 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:
- tasks
- name: Install Python requirements - name: Install Python requirements
vars:
# Inttalling requests >=2.12.0 on Ubuntu 14.04 breaks certificate validation. We restrict to an older version
# to ensure out get_url tests work out fine. This is only an issue if pyOpenSSL is also installed.
# Not sure why RHEL7 needs this specific version
extra_packages: "{{ '' if not (is_rhel7 or is_ubuntu14) else ',requests==2.6.0' }}"
pip: pip:
state: present state: present
name: 'docker{{ extra_packages }}' name: "{{ docker_pip_packages | union(docker_pip_extra_packages) }}"
extra_args: "-c {{ remote_constraints }}" extra_args: "-c {{ remote_constraints }}"
# Detect docker CLI, API and docker-py versions # Detect docker CLI, API and docker-py versions
@ -42,9 +49,9 @@
ignore_errors: yes ignore_errors: yes
- set_fact: - set_fact:
docker_cli_version: "{{ (docker_cli_version_stdout.stdout | default('0.0')) or '0.0' }}" docker_cli_version: "{{ docker_cli_version_stdout.stdout | default('0.0') }}"
docker_api_version: "{{ docker_api_version_stdout.stdout or '0.0' }}" docker_api_version: "{{ docker_api_version_stdout.stdout | default('0.0') }}"
docker_py_version: "{{ docker_py_version_stdout.stdout or '0.0' }}" docker_py_version: "{{ docker_py_version_stdout.stdout | default('0.0') }}"
- debug: - debug:
msg: "Docker CLI version: {{ docker_cli_version }}; Docker API version: {{ docker_api_version }}; docker-py library version: {{ docker_py_version }}" msg: "Docker CLI version: {{ docker_cli_version }}; Docker API version: {{ docker_api_version }}; docker-py library version: {{ docker_py_version }}"
@ -54,12 +61,15 @@
- name: "Remove all ansible-test-* docker containers" - name: "Remove all ansible-test-* docker containers"
shell: 'docker ps --no-trunc --format {% raw %}"{{.Names}}"{% endraw %} | grep "^ansible-test-" | xargs -r docker rm -f' shell: 'docker ps --no-trunc --format {% raw %}"{{.Names}}"{% endraw %} | grep "^ansible-test-" | xargs -r docker rm -f'
register: docker_containers register: docker_containers
- name: "Remove all ansible-test-* docker volumes" - name: "Remove all ansible-test-* docker volumes"
shell: 'docker volume ls --format {% raw %}"{{.Name}}"{% endraw %} | grep "^ansible-test-" | xargs -r docker volume rm -f' shell: 'docker volume ls --format {% raw %}"{{.Name}}"{% endraw %} | grep "^ansible-test-" | xargs -r docker volume rm -f'
register: docker_volumes register: docker_volumes
- name: "Remove all ansible-test-* docker networks" - name: "Remove all ansible-test-* docker networks"
shell: 'docker network ls --no-trunc --format {% raw %}"{{.Name}}"{% endraw %} | grep "^ansible-test-" | xargs -r docker network rm' shell: 'docker network ls --no-trunc --format {% raw %}"{{.Name}}"{% endraw %} | grep "^ansible-test-" | xargs -r docker network rm'
register: docker_networks register: docker_networks
- name: Cleaned docker resources - name: Cleaned docker resources
debug: debug:
var: docker_resources var: docker_resources
@ -73,15 +83,19 @@
- name: List all docker containers - name: List all docker containers
command: docker ps --no-trunc -a command: docker ps --no-trunc -a
register: docker_containers register: docker_containers
- name: List all docker volumes - name: List all docker volumes
command: docker volume ls command: docker volume ls
register: docker_volumes register: docker_volumes
- name: List all docker networks - name: List all docker networks
command: docker network ls --no-trunc command: docker network ls --no-trunc
register: docker_networks register: docker_networks
- name: List all docker images - name: List all docker images
command: docker images --no-trunc -a command: docker images --no-trunc -a
register: docker_images register: docker_images
- name: Still existing docker resources - name: Still existing docker resources
debug: debug:
var: docker_resources var: docker_resources

View file

@ -0,0 +1,5 @@
docker_prereq_packages:
- apt-transport-https
- ca-certificates
- curl
- software-properties-common

View file

@ -0,0 +1,5 @@
docker_prereq_packages:
- dnf-plugins-core
docker_packages:
- docker-ce

View file

@ -0,0 +1,8 @@
docker_prereq_packages:
- yum-utils
- device-mapper-persistent-data
- lvm2
- libseccomp
docker_pip_extra_packages:
- requests==2.6.0

View file

@ -0,0 +1,9 @@
docker_prereq_packages:
- dnf-utils
- device-mapper-persistent-data
- lvm2
- libseccomp
# Docker CE > 3:18.09.1 requires containerd.io >= 1.2.2-3 which is unavaible at this time
docker_packages:
- docker-ce-3:18.09.1

View file

@ -0,0 +1,2 @@
docker_packages:
- docker>=17

View file

@ -0,0 +1,5 @@
docker_pip_extra_packages:
# Installing requests >=2.12.0 on Ubuntu 14.04 breaks certificate validation. We restrict to an older version
# to ensure out get_url tests work out fine. This is only an issue if pyOpenSSL is also installed.
# Not sure why RHEL7 needs this specific version
- requests==2.6.0