summaryrefslogtreecommitdiff
path: root/roles/docker.ubuntu/tasks/main.yml
diff options
context:
space:
mode:
Diffstat (limited to 'roles/docker.ubuntu/tasks/main.yml')
-rw-r--r--roles/docker.ubuntu/tasks/main.yml331
1 files changed, 331 insertions, 0 deletions
diff --git a/roles/docker.ubuntu/tasks/main.yml b/roles/docker.ubuntu/tasks/main.yml
new file mode 100644
index 0000000..ca00437
--- /dev/null
+++ b/roles/docker.ubuntu/tasks/main.yml
@@ -0,0 +1,331 @@
+---
+# tasks file for docker.ubuntu
+- name: "Include proper python vars file"
+ include_vars: "{{ python_vars_file }}"
+
+- name: Fail if not a supported release of Ubuntu
+ fail:
+ msg: "{{ ansible_distribution_version }} is not an acceptable version of Ubuntu for this role"
+ when: ansible_lsb.id|lower == "ubuntu" and ansible_distribution_version|version_compare('14.04', '<')
+
+- name: Fail if not a new release of Debian
+ fail:
+ msg: "{{ ansible_distribution_version }} is not an acceptable version of Debian for this role"
+ when: ansible_lsb.id|lower == "debian" and ansible_distribution_version|version_compare('8.5', '<')
+
+- name: Fail if using python3 with Ansible<2.3
+ fail:
+ msg: "Ansible 2.3+ is required to use Python3 interpreter."
+ when: ansible_version.full | version_compare('2.3', '<') and ansible_python_interpreter is defined and 'python3' in ansible_python_interpreter
+
+- name: Update kernel, kernel extras, Xorg pkgs, and related tasks
+ include: kernel_check_and_update.yml
+ when: kernel_update_and_reboot_permitted or install_kernel_extras
+
+- name: Uninstall old versions of Docker
+ apt:
+ name: "{{ item }}"
+ state: absent
+ with_items:
+ - docker
+ - docker-engine
+ - docker.io
+ when: uninstall_previous_docker_versions
+
+- name: Install linux-image-extra-* packages to enable AuFS driver
+ apt:
+ pkg: "{{ item }}"
+ state: present
+ update_cache: yes
+ cache_valid_time: "{{ docker_apt_cache_valid_time }}"
+ with_items:
+ - linux-image-extra-{{ ansible_kernel }}
+ - linux-image-extra-virtual
+ when: docker_aufs_enabled and ansible_distribution_version|version_compare('14.04', '==')
+ register: linux_image_extra_install
+ ignore_errors: yes
+
+- name: Try again to install linux-image-extra if previous attempt failed
+ apt:
+ pkg: "linux-image-extra-{{ ansible_kernel.split('-')[:-1]|join('-') }}*"
+ state: present
+ update_cache: yes
+ cache_valid_time: "{{ docker_apt_cache_valid_time }}"
+ when: linux_image_extra_install|failed
+
+- name: Ensure dirmngr is available
+ apt:
+ pkg: "{{ apt_dirmngr_pkg }}"
+ state: present
+ update_cache: yes
+ cache_valid_time: "{{ docker_apt_cache_valid_time }}"
+
+- name: Add Docker repository key
+ apt_key:
+ id: "{{ apt_key_sig }}"
+ keyserver: "{{ apt_key_url }}"
+ state: present
+ register: add_repository_key
+ ignore_errors: true
+
+- name: Alternative | Add Docker repository key
+ shell: "apt-key adv --fetch-keys {{ apt-key-url }}"
+ when: add_repository_key|failed
+
+- name: HTTPS APT transport for Docker repository
+ apt:
+ name: apt-transport-https
+ state: present
+
+- name: Add Docker repository and update apt cache
+ apt_repository:
+ repo: "{{ apt_repository }}"
+ mode: '644'
+ update_cache: yes
+ state: present
+
+- name: Install (or update) docker package
+ apt:
+ name: "{{ docker_pkg_name }}"
+ state: "{{ 'latest' if update_docker_package else 'present' }}"
+ update_cache: "{{ update_docker_package }}"
+ cache_valid_time: "{{ docker_apt_cache_valid_time }}"
+
+- name: Set systemd playbook var
+ set_fact:
+ is_systemd: false
+ changed_when: false
+ tags: always
+
+- name: Set systemd playbook var
+ set_fact:
+ is_systemd: true
+ when: ( ansible_distribution == "Ubuntu" and ansible_distribution_version|version_compare('15.04', '>=') or ansible_distribution == "Debian" )
+ tags: always
+
+- name: Set docker_http_proxy_defined flag
+ set_fact:
+ docker_http_proxy_defined: "{{ docker_http_proxy is defined and docker_http_proxy is not none and docker_http_proxy != '' }}"
+ tags: proxy
+
+- name: Set docker_https_proxy_defined flag
+ set_fact:
+ docker_https_proxy_defined: "{{ docker_https_proxy is defined and docker_https_proxy is not none and docker_https_proxy != '' }}"
+ tags: proxy
+
+# https://github.com/moby/moby/issues/25471#issuecomment-263101090
+- name: Creates override directory (systemd)
+ file:
+ path: /etc/systemd/system/docker.service.d
+ state: "{{ (daemon_json is not none or docker_http_proxy_defined or docker_https_proxy_defined) | ternary('directory', 'absent') }}"
+ owner: root
+ group: root
+ mode: 0755
+ when:
+ - is_systemd
+ tags: proxy
+
+- name: Set docker daemon override (systemd)
+ copy:
+ content: |
+ [Service]
+ ExecStart=
+ ExecStart=/usr/bin/dockerd
+ dest: /etc/systemd/system/docker.service.d/override.conf
+ owner: root
+ group: root
+ mode: 0644
+ notify:
+ - Reload systemd
+ - Restart docker
+ when: daemon_json is not none and is_systemd
+
+- name: Set /etc/docker/daemon.json
+ copy:
+ content: "{{ daemon_json | to_nice_json }}"
+ dest: /etc/docker/daemon.json
+ owner: root
+ group: root
+ mode: 0644
+ notify:
+ - Restart docker
+ when: daemon_json is not none
+
+- name: Fix DNS in docker.io
+ lineinfile:
+ dest: "{{ docker_defaults_file_path }}"
+ regexp: "DOCKER_OPTS="
+ line: 'DOCKER_OPTS="--dns {{ ansible_docker0.ipv4.address }}"'
+ register: dns_fix
+ notify: Restart dockerio
+ when: docker_pkg_name == 'docker.io'
+
+- meta: flush_handlers
+ when: "dns_fix|changed"
+
+- pause:
+ seconds: 1
+ when: "dns_fix|changed"
+
+# We must install pip via apt before we can use the pip module below
+- name: "Install {{ _python_packages | join(', ') }} packages with apt"
+ apt:
+ pkg: "{{ item }}"
+ state: latest
+ update_cache: yes
+ cache_valid_time: "{{ docker_apt_cache_valid_time }}"
+ with_items: "{{ _python_packages }}"
+
+# Display an informative message if the docker-compose version needs to be downgraded
+- name: Docker-compose version downgrade
+ debug:
+ msg: >-
+ Downgrading docker-compose version to {{ _pip_version_docker_compose }} because of docker-compose > 1.10
+ requiring docker python package (instead of the docker-py one) which is incompatible with the docker_container
+ module in Ansible < 2.3
+ when: pip_install_docker_compose and _pip_version_docker_compose != pip_version_docker_compose
+
+# See vars/main.yml for more information on this.
+- name: Clean previous docker-py package if installing docker.
+ pip:
+ name: docker-py
+ state: absent
+ executable: "{{ _pip_executable }}"
+ when: (_pip_install_docker or pip_install_docker_compose) and _pip_docker_package_name == 'docker'
+
+# See vars/main.yml for more information on this.
+- name: Clean previous docker package if installing docker-py.
+ pip:
+ name: docker
+ state: absent
+ executable: "{{ _pip_executable }}"
+ when: (_pip_install_docker or pip_install_docker_compose) and _pip_docker_package_name == 'docker-py'
+
+# Upgrade pip with pip to fix angstwad/docker.ubuntu/pull/35 and docker-py/issues/525
+- name: Install pip, setuptools, docker-py and docker-compose with pip
+ pip:
+ name: "{{ item.name }}"
+ state: "{{ 'latest' if item.version=='latest' else 'present' }}"
+ version: "{{ item.version if item.version!='latest' else omit }}"
+ executable: "{{ _pip_executable }}"
+ with_items:
+ - name: pip
+ version: "{{ pip_version_pip }}"
+ install: "{{ pip_install_pip }}"
+ - name: setuptools
+ version: "{{ pip_version_setuptools }}"
+ install: "{{ pip_install_setuptools }}"
+ - name: "{{ _pip_docker_package_name }}"
+ version: "{{ pip_version_docker }}"
+ install: "{{ _pip_install_docker }}"
+ - name: docker-compose
+ version: "{{ _pip_version_docker_compose }}"
+ install: "{{ pip_install_docker_compose }}"
+ when: item.install|bool
+
+- name: Check if /etc/updatedb.conf exists
+ stat:
+ path: /etc/updatedb.conf
+ register: updatedb_conf_exists
+
+- name: Ensure updatedb does not index /var/lib/docker
+ lineinfile:
+ dest: /etc/updatedb.conf
+ state: present
+ backrefs: yes
+ regexp: '^PRUNEPATHS="(/var/lib/docker )?(.*)"$'
+ line: 'PRUNEPATHS="/var/lib/docker \2"'
+ when: updatedb_conf_exists.stat.exists
+
+- name: Check if /etc/default/ufw exists
+ stat:
+ path: /etc/default/ufw
+ register: ufw_default_exists
+
+- name: Change ufw default forward policy from drop to accept
+ lineinfile:
+ dest: /etc/default/ufw
+ regexp: "^DEFAULT_FORWARD_POLICY="
+ line: "DEFAULT_FORWARD_POLICY=\"ACCEPT\""
+ when: ufw_default_exists.stat.exists
+
+- name: Set docker HTTP_PROXY if docker_http_proxy defined
+ lineinfile:
+ dest: /etc/default/docker
+ regexp: "^export http_proxy="
+ line: "export http_proxy=\"{{docker_http_proxy}}\""
+ state: "{{ docker_http_proxy_defined | ternary('present', 'absent') }}"
+ when:
+ - not is_systemd
+ notify:
+ - Restart docker
+ tags: proxy
+
+- name: Set docker HTTPS_PROXY if docker_https_proxy defined
+ lineinfile:
+ dest: /etc/default/docker
+ regexp: "^export https_proxy="
+ line: "export https_proxy=\"{{docker_https_proxy}}\""
+ state: "{{ docker_https_proxy_defined | ternary('present', 'absent') }}"
+ when:
+ - not is_systemd
+ notify:
+ - Restart docker
+ tags: proxy
+
+- name: Set docker HTTP(S)_PROXY if docker_http(s)_proxy defined (systemd)
+ copy:
+ content: |
+ [Service]
+ Environment="{% if docker_http_proxy_defined %}http_proxy={{ docker_http_proxy }}{% endif %}"
+ Environment="{% if docker_https_proxy_defined %}https_proxy={{ docker_https_proxy }}{% endif %}"
+ Environment="no_proxy={{ docker_no_proxy | default('') }}"
+ dest: /etc/systemd/system/docker.service.d/proxy.conf
+ owner: root
+ group: root
+ mode: 0644
+ notify:
+ - Reload systemd
+ - Restart docker
+ when:
+ - is_systemd
+ - docker_http_proxy_defined or docker_https_proxy_defined
+ tags: proxy
+
+- name: Remove docker HTTP(S)_PROXY if docker_http(s)_proxy undefined (systemd)
+ file:
+ path: /etc/systemd/system/docker.service.d/proxy.conf
+ state: absent
+ notify:
+ - Reload systemd
+ - Restart docker
+ when:
+ - is_systemd
+ - not docker_http_proxy_defined and not docker_https_proxy_defined
+ tags: proxy
+
+- name: Start docker
+ service:
+ name: docker
+ state: started
+ when: docker_pkg_name.find('lxc-docker') != -1 or docker_pkg_name.find('docker-engine') != -1
+
+- name: Start docker.io
+ service:
+ name: docker.io
+ state: started
+ when: docker_pkg_name == 'docker.io'
+
+ # ATTENTION: this task can potentially create new users!
+- name: Add users to the docker group
+ user:
+ name: "{{ item }}"
+ groups: docker
+ append: yes
+ with_items: "{{docker_group_members}}"
+ when: docker_group_members is defined
+
+- name: update facts if docker0 is not defined
+ setup:
+ filter: "ansible_docker0"
+ when: ansible_docker0 is not defined