From ef7f5edbb3643dd23009c35e78e6efaae77f1f08 Mon Sep 17 00:00:00 2001 From: Chad Swenson Date: Wed, 28 Mar 2018 15:10:39 -0500 Subject: [PATCH] Remove old docker packages and other docker upgrade fixes (#2536) * Remove old docker packages This removes docker packages that are obsolete if docker-ce packages are to be installed, which fixes some package conflict issues that can occur during upgrades. * Add support for setting obsoletes=0 when installing docker with yum --- roles/docker/defaults/main.yml | 4 ++++ roles/docker/tasks/main.yml | 18 ++++++++++++++++++ roles/docker/tasks/pre-upgrade.yml | 20 ++++++++++++++++++++ roles/docker/vars/redhat.yml | 2 ++ 4 files changed, 44 insertions(+) create mode 100644 roles/docker/tasks/pre-upgrade.yml diff --git a/roles/docker/defaults/main.yml b/roles/docker/defaults/main.yml index aa10371f5..3ed3e9ce7 100644 --- a/roles/docker/defaults/main.yml +++ b/roles/docker/defaults/main.yml @@ -21,6 +21,10 @@ docker_dns_servers_strict: yes docker_container_storage_setup: false +# Used to override obsoletes=0 +yum_conf: /etc/yum.conf +docker_yum_conf: /etc/yum_docker.conf + # CentOS/RedHat docker-ce repo docker_rh_repo_base_url: 'https://download.docker.com/linux/centos/7/$basearch/stable' docker_rh_repo_gpgkey: 'https://download.docker.com/linux/centos/gpg' diff --git a/roles/docker/tasks/main.yml b/roles/docker/tasks/main.yml index 80b917114..729397b44 100644 --- a/roles/docker/tasks/main.yml +++ b/roles/docker/tasks/main.yml @@ -30,6 +30,8 @@ tags: - facts +- import_tasks: pre-upgrade.yml + - name: ensure docker-ce repository public key is installed action: "{{ docker_repo_key_info.pkg_key }}" args: @@ -78,11 +80,27 @@ dest: "/etc/yum.repos.d/docker.repo" when: ansible_distribution in ["CentOS","RedHat"] and not is_atomic +- 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 + - name: ensure docker packages are installed action: "{{ docker_package_info.pkg_mgr }}" args: pkg: "{{item.name}}" force: "{{item.force|default(omit)}}" + conf_file: "{{item.yum_conf|default(omit)}}" state: present register: docker_task_result until: docker_task_result|succeeded diff --git a/roles/docker/tasks/pre-upgrade.yml b/roles/docker/tasks/pre-upgrade.yml new file mode 100644 index 000000000..9315da305 --- /dev/null +++ b/roles/docker/tasks/pre-upgrade.yml @@ -0,0 +1,20 @@ +--- +- name: Ensure old versions of Docker are not installed. | Debian + package: + name: '{{ item }}' + state: absent + with_items: + - docker + - docker-engine + when: ansible_os_family == 'Debian' and (docker_versioned_pkg[docker_version | string] | search('docker-ce')) + +- name: Ensure old versions of Docker are not installed. | RedHat + package: + name: '{{ item }}' + state: absent + with_items: + - docker + - docker-common + - docker-engine + - docker-selinux + when: ansible_os_family == 'RedHat' and (docker_versioned_pkg[docker_version | string] | search('docker-ce')) \ No newline at end of file diff --git a/roles/docker/vars/redhat.yml b/roles/docker/vars/redhat.yml index 39ba211d8..cd53e284c 100644 --- a/roles/docker/vars/redhat.yml +++ b/roles/docker/vars/redhat.yml @@ -28,7 +28,9 @@ docker_package_info: pkg_mgr: yum pkgs: - name: "{{ docker_selinux_versioned_pkg[docker_selinux_version | string] }}" + yum_conf: "{{ docker_yum_conf }}" - name: "{{ docker_versioned_pkg[docker_version | string] }}" + yum_conf: "{{ docker_yum_conf }}" docker_repo_key_info: pkg_key: ''