2015-10-04 04:19:50 +08:00
---
2018-10-10 10:14:33 +08:00
- name : check if atomic host
stat :
path : /run/ostree-booted
register : ostree
- set_fact :
is_atomic : "{{ ostree.stat.exists }}"
2015-12-31 00:11:33 +08:00
- name : gather os specific variables
include_vars : "{{ item }}"
with_first_found :
- files :
2017-08-24 17:09:52 +08:00
- "{{ ansible_distribution|lower }}-{{ ansible_distribution_version|lower|replace('/', '_') }}.yml"
2018-08-23 23:11:07 +08:00
- "{{ ansible_distribution|lower }}-{{ ansible_distribution_release|lower }}-{{ host_architecture }}.yml"
- "{{ ansible_distribution|lower }}-{{ ansible_distribution_release|lower }}.yml"
2017-08-24 17:09:52 +08:00
- "{{ ansible_distribution|lower }}-{{ ansible_distribution_major_version|lower|replace('/', '_') }}.yml"
2018-08-21 23:53:23 +08:00
- "{{ ansible_distribution|lower }}-{{ host_architecture }}.yml"
2017-08-24 17:09:52 +08:00
- "{{ ansible_distribution|lower }}.yml"
2018-08-21 23:53:23 +08:00
- "{{ ansible_os_family|lower }}-{{ host_architecture }}.yml"
2017-08-24 17:09:52 +08:00
- "{{ ansible_os_family|lower }}.yml"
- defaults.yml
2015-12-31 00:11:33 +08:00
paths :
2017-08-24 17:09:52 +08:00
- ../vars
2016-02-20 01:48:53 +08:00
skip : true
2017-10-05 15:43:04 +08:00
tags :
- facts
2015-12-31 00:11:33 +08:00
2018-04-26 17:52:06 +08:00
# https://yum.dockerproject.org/repo/main/opensuse/ contains packages for an EOL
# openSUSE version so we can't use it. The only alternative is to use the docker
# packages from the distribution repositories.
- name : Warn about Docker version on SUSE
debug :
msg : "SUSE distributions always install Docker from the distro repos"
when : ansible_pkg_mgr == 'zypper'
2018-01-29 19:37:48 +08:00
- include_tasks : set_facts_dns.yml
2016-12-22 00:18:11 +08:00
when : dns_mode != 'none' and resolvconf_mode == 'docker_dns'
2017-10-05 15:43:04 +08:00
tags :
- facts
2016-12-22 00:18:11 +08:00
2015-12-31 00:11:33 +08:00
- name : check for minimum kernel version
fail :
msg : >
docker requires a minimum kernel version of
{{ docker_kernel_min_version }} on
{{ ansible_distribution }}-{{ ansible_distribution_version }}
2018-12-18 17:39:25 +08:00
when : (not ansible_os_family in ["CoreOS", "Container Linux by CoreOS", "ClearLinux"]) and (ansible_kernel is version(docker_kernel_min_version, "<"))
2017-10-05 15:43:04 +08:00
tags :
- facts
2015-12-31 00:11:33 +08:00
2018-03-29 04:10:39 +08:00
- import_tasks : pre-upgrade.yml
2018-03-12 11:05:12 +08:00
- name : ensure docker-ce repository public key is installed
2015-12-31 00:11:33 +08:00
action : "{{ docker_repo_key_info.pkg_key }}"
2016-01-13 00:56:29 +08:00
args :
id : "{{item}}"
2017-10-28 02:48:11 +08:00
url : "{{docker_repo_key_info.url}}"
2016-01-13 00:56:29 +08:00
state : present
2016-09-13 21:29:22 +08:00
register : keyserver_task_result
2018-10-17 06:33:30 +08:00
until : keyserver_task_result is succeeded
2016-09-13 21:29:22 +08:00
retries : 4
2018-10-10 10:14:33 +08:00
delay : "{{ retry_stagger | d(3) }}"
2016-03-30 16:23:43 +08:00
with_items : "{{ docker_repo_key_info.repo_keys }}"
2018-12-18 17:39:25 +08:00
when : not (ansible_os_family in ["CoreOS", "Container Linux by CoreOS", "RedHat", "Suse", "ClearLinux"] or is_atomic)
2015-12-31 00:11:33 +08:00
2018-03-12 11:05:12 +08:00
- name : ensure docker-ce repository is enabled
2015-12-31 00:11:33 +08:00
action : "{{ docker_repo_info.pkg_repo }}"
2016-01-13 00:56:29 +08:00
args :
repo : "{{item}}"
state : present
2016-03-30 16:23:43 +08:00
with_items : "{{ docker_repo_info.repos }}"
2018-12-18 17:39:25 +08:00
when : not (ansible_os_family in ["CoreOS", "Container Linux by CoreOS", "RedHat", "Suse", "ClearLinux"] or is_atomic) and (docker_repo_info.repos|length > 0)
2018-03-12 11:05:12 +08:00
- name : ensure docker-engine repository public key is installed
action : "{{ dockerproject_repo_key_info.pkg_key }}"
args :
id : "{{item}}"
url : "{{dockerproject_repo_key_info.url}}"
state : present
register : keyserver_task_result
2018-10-17 06:33:30 +08:00
until : keyserver_task_result is succeeded
2018-03-12 11:05:12 +08:00
retries : 4
2018-10-10 10:14:33 +08:00
delay : "{{ retry_stagger | d(3) }}"
2018-03-12 11:05:12 +08:00
with_items : "{{ dockerproject_repo_key_info.repo_keys }}"
2018-08-22 22:15:38 +08:00
when :
2018-12-18 17:39:25 +08:00
- not (ansible_os_family in ["CoreOS", "Container Linux by CoreOS", "RedHat", "Suse", "ClearLinux"] or is_atomic)
2018-08-22 22:15:38 +08:00
- use_docker_engine is defined and use_docker_engine
2018-03-12 11:05:12 +08:00
- name : ensure docker-engine repository is enabled
action : "{{ dockerproject_repo_info.pkg_repo }}"
args :
repo : "{{item}}"
state : present
with_items : "{{ dockerproject_repo_info.repos }}"
2018-08-22 22:15:38 +08:00
when :
- use_docker_engine is defined and use_docker_engine
2018-12-18 17:39:25 +08:00
- not (ansible_os_family in ["CoreOS", "Container Linux by CoreOS", "RedHat", "Suse", "ClearLinux"] or is_atomic) and (dockerproject_repo_info.repos|length > 0)
2015-12-31 00:11:33 +08:00
2018-09-20 01:57:20 +08:00
- name : Configure docker repository on Fedora
template :
src : "fedora_docker.repo.j2"
dest : "{{ yum_repo_dir }}/docker.repo"
when : ansible_distribution == "Fedora" and not is_atomic
2016-04-11 15:33:08 +08:00
- name : Configure docker repository on RedHat/CentOS
2017-02-08 18:19:08 +08:00
template :
src : "rh_docker.repo.j2"
2018-05-16 18:56:04 +08:00
dest : "{{ yum_repo_dir }}/docker.repo"
2017-02-25 05:41:27 +08:00
when : ansible_distribution in ["CentOS","RedHat"] and not is_atomic
2016-04-11 04:08:13 +08:00
2019-02-01 08:19:48 +08:00
- name : check if container-selinux is available
yum :
list : "container-selinux"
register : yum_result
when : ansible_distribution in ["CentOS","RedHat"] and not is_atomic
2019-02-19 22:06:29 +08:00
- name : Configure extras repository on RedHat/CentOS if container-selinux is not available in current repos
2019-02-01 08:19:48 +08:00
yum_repository :
name : extras
description : "CentOS-7 - Extras"
state : present
baseurl : "{{ extras_rh_repo_base_url }}"
file : "extras"
gpgcheck : yes
gpgkey : "{{extras_rh_repo_gpgkey}}"
keepcache : "{{ docker_rpm_keepcache | default('1') }}"
2019-02-13 08:46:32 +08:00
proxy : " {{ http_proxy | default('_none_') }}"
2019-02-01 08:19:48 +08:00
when :
- ansible_distribution in ["CentOS","RedHat"] and not is_atomic
- yum_result.results | length == 0
2018-03-29 04:10:39 +08:00
- name : Copy yum.conf for editing
copy :
src : "{{ yum_conf }}"
dest : "{{ docker_yum_conf }}"
remote_src : yes
when : ansible_distribution in ["CentOS","RedHat"] and not is_atomic
- name : Edit copy of yum.conf to set obsoletes=0
lineinfile :
path : "{{ docker_yum_conf }}"
state : present
regexp : '^obsoletes='
line : 'obsoletes=0'
when : ansible_distribution in ["CentOS","RedHat"] and not is_atomic
2015-12-31 00:11:33 +08:00
- name : ensure docker packages are installed
action : "{{ docker_package_info.pkg_mgr }}"
2016-01-13 00:56:29 +08:00
args :
2016-06-17 00:12:11 +08:00
pkg : "{{item.name}}"
force : "{{item.force|default(omit)}}"
2018-03-29 04:10:39 +08:00
conf_file : "{{item.yum_conf|default(omit)}}"
2019-04-09 15:17:05 +08:00
state : "{{item.state | default('present')}}"
2018-09-20 01:57:20 +08:00
update_cache : "{{ omit if ansible_distribution == 'Fedora' else True }}"
2016-09-13 21:29:22 +08:00
register : docker_task_result
2018-10-17 06:33:30 +08:00
until : docker_task_result is succeeded
2016-09-13 21:29:22 +08:00
retries : 4
2018-10-10 10:14:33 +08:00
delay : "{{ retry_stagger | d(3) }}"
2016-03-30 16:23:43 +08:00
with_items : "{{ docker_package_info.pkgs }}"
2017-01-16 22:52:28 +08:00
notify : restart docker
2018-12-18 17:39:25 +08:00
when : not (ansible_os_family in ["CoreOS", "Container Linux by CoreOS", "ClearLinux"] or is_atomic) and (docker_package_info.pkgs|length > 0)
2018-08-22 22:15:38 +08:00
ignore_errors : true
2018-12-18 17:39:25 +08:00
- name : Ensure docker packages are installed
action : "{{ docker_package_info.pkg_mgr }}"
args :
name : "{{ item.name }}"
2019-04-09 15:17:05 +08:00
state : "{{item.state | default('present')}}"
2018-12-18 17:39:25 +08:00
with_items : "{{ docker_package_info.pkgs }}"
register : docker_task_result
until : docker_task_result is succeeded
retries : 4
delay : "{{ retry_stagger | d(3) }}"
notify : restart docker
ignore_errors : true
when : ansible_os_family in ["ClearLinux"]
2018-08-22 22:15:38 +08:00
- name : get available packages on Ubuntu
command : apt-cache policy docker-ce
2018-09-20 01:57:20 +08:00
when :
2018-10-17 06:33:30 +08:00
- docker_task_result is failed
2018-09-20 01:57:20 +08:00
- ansible_distribution == 'Ubuntu'
2018-08-22 22:15:38 +08:00
register : available_packages
- name : show available packages on ubuntu
fail :
msg : "{{available_packages}}"
2018-09-20 01:57:20 +08:00
when :
2018-10-17 06:33:30 +08:00
- docker_task_result is failed
2018-09-20 01:57:20 +08:00
- ansible_distribution == 'Ubuntu'
2015-12-31 00:11:33 +08:00
2018-06-05 19:15:20 +08:00
# This is required to ensure any apt upgrade will not break kubernetes
- name : Set docker pin priority to apt_preferences on Debian family
template :
src : "apt_preferences.d/debian_docker.j2"
dest : "/etc/apt/preferences.d/docker"
owner : "root"
mode : 0644
2018-12-18 17:39:25 +08:00
when : not (ansible_os_family in ["CoreOS", "Container Linux by CoreOS", "ClearLinux", "RedHat", "Suse"] or is_atomic)
2018-06-05 19:15:20 +08:00
2019-04-03 16:37:44 +08:00
- name : ensure docker started, remove our config if docker start failed and try again
block :
- name : ensure service is started if docker packages are already present
service :
name : docker
state : started
when : docker_task_result is not changed
rescue :
- debug :
msg : "Docker start failed. Try to remove our config"
- name : remove kubespray generated config
file :
path : "{{ item }}"
state : absent
with_items :
- /etc/systemd/system/docker.service.d/http-proxy.conf
- /etc/systemd/system/docker.service.d/docker-options.conf
- /etc/systemd/system/docker.service.d/docker-dns.conf
- /etc/systemd/system/docker.service.d/docker-orphan-cleanup.conf
notify : restart docker
2018-04-26 17:52:06 +08:00
2017-12-12 05:57:26 +08:00
- name : flush handlers so we can wait for docker to come up
meta : flush_handlers
- name : set fact for docker_version
2017-01-26 23:28:48 +08:00
command : "docker version -f '{{ '{{' }}.Client.Version{{ '}}' }}'"
2017-12-19 22:47:54 +08:00
register : installed_docker_version
2016-12-22 00:18:11 +08:00
changed_when : false
2017-12-12 05:57:26 +08:00
- name : check minimum docker version for docker_dns mode. You need at least docker version >= 1.12 for resolvconf_mode=docker_dns
fail :
msg : "You need at least docker version >= 1.12 for resolvconf_mode=docker_dns"
when : >
dns_mode != 'none' and
resolvconf_mode == 'docker_dns' and
2018-10-17 06:33:30 +08:00
installed_docker_version.stdout is version('1.12', '<')
2016-12-22 00:18:11 +08:00
2016-11-05 05:40:14 +08:00
- name : Set docker systemd config
2018-01-29 19:37:48 +08:00
import_tasks : systemd.yml
2016-01-25 09:01:25 +08:00
2015-12-31 00:11:33 +08:00
- name : ensure docker service is started and enabled
service :
name : "{{ item }}"
enabled : yes
state : started
with_items :
2016-12-08 21:36:00 +08:00
- docker