From 42872d84e97c9abee27d8aeda965fc16019e9385 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Oscarsson?= Date: Sun, 24 Jun 2018 14:27:05 +0200 Subject: [PATCH] Fixes #42 --- CHANGELOG.md | 1 + README.md | 4 ++ defaults/main.yml | 4 ++ .../docker.service.d/docker-storage.conf | 4 -- tasks/configure-drop-ins.yml | 30 ++++++++++ tasks/kernel-3-mount-fixes.yml | 7 --- tasks/main.yml | 3 + tasks/setup-repository.yml | 2 +- templates/docker-envs.j2 | 1 + templates/drop-ins/default.conf.j2 | 4 ++ tests/test_issue_42.yml | 11 ++++ tests/vagrant_config.yml | 56 ++++++++++++------- vars/main.yml | 7 +++ 13 files changed, 103 insertions(+), 31 deletions(-) delete mode 100644 files/etc/systemd/system/docker.service.d/docker-storage.conf create mode 100644 tasks/configure-drop-ins.yml create mode 100644 templates/docker-envs.j2 create mode 100644 templates/drop-ins/default.conf.j2 create mode 100644 tests/test_issue_42.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ecd9ba..6c02113 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Fixed - Role is not idempotent for Ubuntu and Debian distributions ([#41](../../issues/41)) +- Cannot set hosts in daemon.json because of arguments to dockerd in Ubuntu/Debian ([#42](../../issues/42)) ## [1.6.0](../../releases/tag/1.6.0) - 2018-06-07 diff --git a/README.md b/README.md index 961d2cc..8f4426d 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,10 @@ Variables related to this role are listed below: # docker_daemon_config: # experimental: true docker_daemon_config: +# Docker daemon options +# Docker daemon is configured with '-H fd://' by default in Ubuntu/Debian which cause problems. +# https://github.com/moby/moby/issues/25471 +docker_daemon_opts: '' # To compensate for situation where Docker daemon fails because of usermod incompatibility. # Ensures that 'dockremap:500000:65536' is present in /etc/subuid and /etc/subgid. # Note! If userns-remap is set to 'default' in docker_daemon_config this config will be unnecessary. diff --git a/defaults/main.yml b/defaults/main.yml index e196e77..e4fc8f4 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -6,6 +6,10 @@ # docker_daemon_config: # experimental: true docker_daemon_config: +# Docker daemon options +# Docker daemon is configured with '-H fd://' by default in Ubuntu/Debian which cause problems. +# https://github.com/moby/moby/issues/25471 +docker_daemon_opts: '' # To compensate for situation where Docker daemon fails because of usermod incompatibility. # Ensures that 'dockremap:500000:65536' is present in /etc/subuid and /etc/subgid. # Note! If userns-remap is set to 'default' in docker_daemon_config this config will be unnecessary. diff --git a/files/etc/systemd/system/docker.service.d/docker-storage.conf b/files/etc/systemd/system/docker.service.d/docker-storage.conf deleted file mode 100644 index a20cd55..0000000 --- a/files/etc/systemd/system/docker.service.d/docker-storage.conf +++ /dev/null @@ -1,4 +0,0 @@ -[Service] -EnvironmentFile=-/etc/sysconfig/docker-storage -ExecStart= -ExecStart=/usr/bin/dockerd $DOCKER_STORAGE_OPTIONS diff --git a/tasks/configure-drop-ins.yml b/tasks/configure-drop-ins.yml new file mode 100644 index 0000000..4d83342 --- /dev/null +++ b/tasks/configure-drop-ins.yml @@ -0,0 +1,30 @@ +- name: Ensure /etc/systemd/system/docker.service.d directory exists + file: + path: /etc/systemd/system/docker.service.d + state: directory + mode: 0755 + become: yes + +- name: Setup default Docker drop-in to enable use of environment file + template: + src: drop-ins/default.conf.j2 + dest: /etc/systemd/system/docker.service.d/default.conf + become: yes + register: systemd_docker_dropin + vars: + systemd_envs_dir: "{{ docker_systemd_envs_dir[_docker_os_dist] }}" + +- name: Setup Docker environment file {{ docker_systemd_envs_dir[_docker_os_dist] }}/docker-envs + template: + src: docker-envs.j2 + dest: "{{ docker_systemd_envs_dir[_docker_os_dist] }}/docker-envs" + become: yes + register: systemd_docker_env + vars: + docker_opts: "{{ docker_daemon_opts }}" + +- name: Force daemon reload of systemd + systemd: + daemon_reload: yes + become: yes + when: systemd_docker_dropin|changed or systemd_docker_env|changed \ No newline at end of file diff --git a/tasks/kernel-3-mount-fixes.yml b/tasks/kernel-3-mount-fixes.yml index 755cf19..c2f5ee3 100644 --- a/tasks/kernel-3-mount-fixes.yml +++ b/tasks/kernel-3-mount-fixes.yml @@ -12,13 +12,6 @@ become: yes when: may_detach_mounts.stat.exists -- name: Ensure /etc/systemd/system/docker.service.d directory exists - file: - path: /etc/systemd/system/docker.service.d - state: directory - mode: 0755 - become: yes - - name: Copy systemd drop-in for Docker Mount Flags slave configuration to avoid 'Device or resource busy' copy: src: files/etc/systemd/system/docker.service.d/mountflags-slave.conf diff --git a/tasks/main.yml b/tasks/main.yml index 1d60273..726ae17 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -33,6 +33,9 @@ - include_tasks: setup-audit.yml tags: ["configure"] +- include_tasks: configure-drop-ins.yml + tags: ["configure"] + - include_tasks: kernel-3-mount-fixes.yml when: ansible_kernel | version_compare('4', '<') tags: ["configure"] diff --git a/tasks/setup-repository.yml b/tasks/setup-repository.yml index 632c334..35c2ef6 100644 --- a/tasks/setup-repository.yml +++ b/tasks/setup-repository.yml @@ -25,7 +25,7 @@ _docker_os_dist == "CentOS" or _docker_os_dist == "RedHat" -- name: Add Docker’s official GPG key +- name: Add Docker official GPG key apt_key: url: https://download.docker.com/linux/{{ _docker_os_dist|lower }}/gpg state: present diff --git a/templates/docker-envs.j2 b/templates/docker-envs.j2 new file mode 100644 index 0000000..9645f9b --- /dev/null +++ b/templates/docker-envs.j2 @@ -0,0 +1 @@ +DOCKER_OPTS='{{ docker_opts }}' diff --git a/templates/drop-ins/default.conf.j2 b/templates/drop-ins/default.conf.j2 new file mode 100644 index 0000000..fd79656 --- /dev/null +++ b/templates/drop-ins/default.conf.j2 @@ -0,0 +1,4 @@ +[Service] +EnvironmentFile=-{{ systemd_envs_dir }}/docker-envs +ExecStart= +ExecStart=/usr/bin/dockerd $DOCKER_OPTS diff --git a/tests/test_issue_42.yml b/tests/test_issue_42.yml new file mode 100644 index 0000000..b941295 --- /dev/null +++ b/tests/test_issue_42.yml @@ -0,0 +1,11 @@ +--- +- hosts: test-host + vars: + docker_daemon_config: + hosts: + # fd:// does not work in CentOS + - unix:///var/run/docker.sock + - tcp://0.0.0.0:2376 + init: true + roles: + - haxorof.docker-ce diff --git a/tests/vagrant_config.yml b/tests/vagrant_config.yml index faa3940..4552d9c 100644 --- a/tests/vagrant_config.yml +++ b/tests/vagrant_config.yml @@ -1,38 +1,56 @@ configs: - use: 'centos' - centos_no_docker: + use: 'defaults_centos' + # No Docker installed + no_docker_centos: box: 'geerlingguy/centos7' prep_yml: prepare.yml test_yml: test_nothing.yml - centos: + # Older Docker test + old_docker_centos: box: 'geerlingguy/centos7' prep_yml: prepare.yml + test_yml: test_old_version.yml + # Role default tests + defaults_centos: + box: 'geerlingguy/centos7' + prep_yml: prepare.yml + test_yml: test_defaults.yml + defaults_ubuntu_trusty: + box: 'geerlingguy/ubuntu1404' + prep_yml: prepare.yml test_yml: test_defaults.yml - centos_config: + defaults_debian_jessie: + box: 'geerlingguy/debian8' + prep_yml: prepare.yml + test_yml: test_defaults.yml + # Config tests + config_centos: box: 'geerlingguy/centos7' prep_yml: prepare.yml test_yml: test_config.yml - centos_storage: + # Storage testing + config_storage_centos: box: 'geerlingguy/centos7' prep_yml: prepare_storage.yml test_yml: test_config_storage.yml - centos_old_docker: - box: 'geerlingguy/centos7' - prep_yml: prepare.yml - test_yml: test_old_version.yml - ubuntu_trusty: - box: 'geerlingguy/ubuntu1404' - prep_yml: prepare.yml - test_yml: test_config.yml - ubuntu_xenial: + config_storage_ubuntu_xenial: box: 'geerlingguy/ubuntu1604' prep_yml: prepare_storage.yml test_yml: test_config_storage.yml - debian_jessie: - box: 'geerlingguy/debian8' - prep_yml: prepare.yml - test_yml: test_config.yml - debian_stretch: + config_storage_debian_stretch: box: 'geerlingguy/debian9' prep_yml: prepare_storage.yml test_yml: test_config_storage.yml + # Issue testing + issue_42_ubuntu_xenial: + box: 'geerlingguy/ubuntu1604' + prep_yml: prepare.yml + test_yml: test_issue_42.yml + issue_42_debian_stretch: + box: 'geerlingguy/debian9' + prep_yml: prepare.yml + test_yml: test_issue_42.yml + issue_42_centos: + box: 'geerlingguy/centos7' + prep_yml: prepare.yml + test_yml: test_issue_42.yml \ No newline at end of file diff --git a/vars/main.yml b/vars/main.yml index 8f6e45f..3bd112d 100644 --- a/vars/main.yml +++ b/vars/main.yml @@ -41,6 +41,13 @@ docker_cmd_update_repo_cache: Ubuntu: apt-get update Debian: apt-get update +docker_systemd_envs_dir: + CentOS: /etc/sysconfig + RedHat: /etc/sysconfig + Fedora: /etc/sysconfig + Ubuntu: /etc/default + Debian: /etc/default + docker_old_packages: CentOS: - docker