From f04ad931db6e1b48c534a20f819c228a0c430c83 Mon Sep 17 00:00:00 2001 From: Houssem Ben Ali Date: Tue, 30 Sep 2025 16:50:32 +0200 Subject: [PATCH 1/8] Add Suse Support --- README.md | 1 + meta/main.yml | 6 ++++++ tasks/main.yml | 5 ++++- tasks/setup-Suse.yml | 27 +++++++++++++++++++++++++++ vars/Suse.yml | 35 +++++++++++++++++++++++++++++++++++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 tasks/setup-Suse.yml create mode 100644 vars/Suse.yml diff --git a/README.md b/README.md index 7ddd152..79112cb 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ docker_obsolete_packages: - [`RedHat.yaml`](./vars/RedHat.yml) - [`Debian.yaml`](./vars/Debian.yml) +- [`Suse.yaml`](./vars/Suse.yml) A list of packages to be uninstalled prior to running this role. See [Docker's installation instructions](https://docs.docker.com/engine/install/debian/#uninstall-old-versions) for an up-to-date list of old packages that should be removed. diff --git a/meta/main.yml b/meta/main.yml index bae753a..d92ddd3 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -30,6 +30,12 @@ galaxy_info: - name: ArchLinux versions: - all + - name: SLES + versions: + - all + - name: openSUSE + versions: + - all galaxy_tags: - web - system diff --git a/tasks/main.yml b/tasks/main.yml index ab0eacd..a434afb 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -13,6 +13,9 @@ - include_tasks: setup-RedHat.yml when: ansible_facts.os_family == 'RedHat' +- include_tasks: setup-Suse.yml + when: ansible_facts.os_family == 'Suse' + - include_tasks: setup-Debian.yml when: ansible_facts.os_family == 'Debian' @@ -39,7 +42,7 @@ state: "{{ docker_compose_package_state }}" notify: restart docker ignore_errors: "{{ ansible_check_mode }}" - when: "docker_install_compose_plugin | bool == true and (ansible_version.full is version_compare('2.12', '<') or ansible_facts.os_family not in ['RedHat', 'Debian'])" + when: "docker_install_compose_plugin | bool == true and (ansible_version.full is version_compare('2.12', '<') or ansible_facts.os_family not in ['RedHat', 'Debian', 'Suse'])" - name: Install docker-compose-plugin (with downgrade option). package: diff --git a/tasks/setup-Suse.yml b/tasks/setup-Suse.yml new file mode 100644 index 0000000..f946eab --- /dev/null +++ b/tasks/setup-Suse.yml @@ -0,0 +1,27 @@ +--- +- name: Ensure old versions of Docker are not installed. + package: + name: + - docker + - docker-engine + - docker.io + - docker-ce + - docker-ce-cli + state: absent + +- name: Add Docker repository (openSUSE / SLES). + zypper_repository: + name: "docker-ce" + repo: "{{ docker_zypper_repo_url }}" + state: present + auto_import_keys: yes + when: docker_add_repo | bool + +- name: Refresh zypper repositories. + command: zypper --non-interactive refresh + when: docker_add_repo | bool + +- name: Ensure Docker packages are installed. + ansible.legacy.zypper: + name: "{{ docker_packages }}" + state: present \ No newline at end of file diff --git a/vars/Suse.yml b/vars/Suse.yml new file mode 100644 index 0000000..dd95033 --- /dev/null +++ b/vars/Suse.yml @@ -0,0 +1,35 @@ +--- +# Used only for openSUSE / SLES (Suse OS-Family) +# https://en.opensuse.org/Docker +# https://docs.docker.com/engine/install/binaries/ + +docker_obsolete_packages: + - docker-engine + - docker.io + - docker-ce + - docker-ce-cli + - docker-buildx-plugin + - docker-ce-rootless-extras + - containerd.io + - runc + +# SUSE provides a monolithic "docker" package and companions. +docker_packages: + - docker + - containerd + - docker-runc + +docker_suse_release: >- + {{ 'openSUSE_Leap_15.5' + if ansible_distribution_version is match('15\.5') + else 'openSUSE_Leap_15.4' + if ansible_distribution_version is match('15\.4') + else 'openSUSE_Tumbleweed' + if ansible_distribution == 'openSUSE Tumbleweed' + else 'openSUSE_Leap_' + ansible_distribution_version }} + + +# Official repo for openSUSE Leap (adjust $releasever if needed) +docker_zypper_repo_url: "https://download.opensuse.org/repositories/Virtualization:/containers/{{ docker_suse_release }}/" + +docker_add_repo: true From e1515e97b9983062337b4f3a34d3e4e3533eb5fd Mon Sep 17 00:00:00 2001 From: Houssem Ben Ali Date: Wed, 1 Oct 2025 10:20:33 +0200 Subject: [PATCH 2/8] Fix lint issues --- tasks/setup-Suse.yml | 6 +++--- vars/Suse.yml | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/tasks/setup-Suse.yml b/tasks/setup-Suse.yml index f946eab..4a8b4a1 100644 --- a/tasks/setup-Suse.yml +++ b/tasks/setup-Suse.yml @@ -15,13 +15,13 @@ repo: "{{ docker_zypper_repo_url }}" state: present auto_import_keys: yes - when: docker_add_repo | bool + when: docker_add_repo | bool == true - name: Refresh zypper repositories. command: zypper --non-interactive refresh - when: docker_add_repo | bool + when: docker_add_repo | bool == true - name: Ensure Docker packages are installed. ansible.legacy.zypper: name: "{{ docker_packages }}" - state: present \ No newline at end of file + state: present diff --git a/vars/Suse.yml b/vars/Suse.yml index dd95033..d81caae 100644 --- a/vars/Suse.yml +++ b/vars/Suse.yml @@ -30,6 +30,7 @@ docker_suse_release: >- # Official repo for openSUSE Leap (adjust $releasever if needed) -docker_zypper_repo_url: "https://download.opensuse.org/repositories/Virtualization:/containers/{{ docker_suse_release }}/" +docker_zypper_repo_url: >- + https://download.opensuse.org/repositories/Virtualization:/containers/{{ docker_suse_release }}/ docker_add_repo: true From a6f361f39f64ae63409f0e33fa34177a3f34fc8c Mon Sep 17 00:00:00 2001 From: Houssem Ben Ali Date: Wed, 1 Oct 2025 10:23:29 +0200 Subject: [PATCH 3/8] Add opensuseleap15 to CI workflow --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bf25c4e..2215b63 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,6 +47,7 @@ jobs: - debian12 - debian11 - fedora40 + - opensuseleap15 steps: - name: Check out the codebase. From 2f5715734bc590f6f6637266e0c4953950ee7c99 Mon Sep 17 00:00:00 2001 From: Houssem Ben Ali Date: Wed, 1 Oct 2025 17:53:33 +0200 Subject: [PATCH 4/8] Avoid docker-runc removal --- tasks/setup-Suse.yml | 23 +++++++++++------------ vars/Suse.yml | 29 +++++++++++++++++------------ 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/tasks/setup-Suse.yml b/tasks/setup-Suse.yml index 4a8b4a1..926b116 100644 --- a/tasks/setup-Suse.yml +++ b/tasks/setup-Suse.yml @@ -1,27 +1,26 @@ --- -- name: Ensure old versions of Docker are not installed. +# Remove old or conflicting Docker packages +- name: Ensure old versions of Docker are not installed package: - name: - - docker - - docker-engine - - docker.io - - docker-ce - - docker-ce-cli + name: "{{ docker_obsolete_packages }}" state: absent -- name: Add Docker repository (openSUSE / SLES). +# Add Docker repository (openSUSE / SLES) +- name: Add Docker repository zypper_repository: name: "docker-ce" repo: "{{ docker_zypper_repo_url }}" state: present auto_import_keys: yes - when: docker_add_repo | bool == true + when: docker_add_repo | bool -- name: Refresh zypper repositories. +# Refresh zypper repositories to pick up the new Docker repo +- name: Refresh zypper repositories command: zypper --non-interactive refresh - when: docker_add_repo | bool == true + when: docker_add_repo | bool -- name: Ensure Docker packages are installed. +# Install Docker packages +- name: Ensure Docker packages are installed ansible.legacy.zypper: name: "{{ docker_packages }}" state: present diff --git a/vars/Suse.yml b/vars/Suse.yml index d81caae..246072b 100644 --- a/vars/Suse.yml +++ b/vars/Suse.yml @@ -1,8 +1,9 @@ --- -# Used only for openSUSE / SLES (Suse OS-Family) +# Used only for openSUSE / SLES (SUSE OS-Family) # https://en.opensuse.org/Docker # https://docs.docker.com/engine/install/binaries/ +# Packages to remove if present (old or conflicting Docker packages) docker_obsolete_packages: - docker-engine - docker.io @@ -13,24 +14,28 @@ docker_obsolete_packages: - containerd.io - runc -# SUSE provides a monolithic "docker" package and companions. +# Packages to install on openSUSE / SLES +# Use 'runc' from repo, not 'docker-runc' (avoids conflicts on Leap 15.6) docker_packages: - docker - containerd - - docker-runc + - runc +# Map SUSE releases to Docker repository paths docker_suse_release: >- - {{ 'openSUSE_Leap_15.5' - if ansible_distribution_version is match('15\.5') - else 'openSUSE_Leap_15.4' - if ansible_distribution_version is match('15\.4') - else 'openSUSE_Tumbleweed' - if ansible_distribution == 'openSUSE Tumbleweed' - else 'openSUSE_Leap_' + ansible_distribution_version }} + {% if ansible_distribution_version is match('15\\.6') %} + openSUSE_Leap_15.6 + {% elif ansible_distribution_version is match('15\\.5') %} + openSUSE_Leap_15.5 + {% elif ansible_distribution_version is match('15\\.4') %} + openSUSE_Leap_15.4 + {% else %} + openSUSE_Tumbleweed + {% endif %} - -# Official repo for openSUSE Leap (adjust $releasever if needed) +# Official Docker repo URL for openSUSE Leap docker_zypper_repo_url: >- https://download.opensuse.org/repositories/Virtualization:/containers/{{ docker_suse_release }}/ +# Control whether to add the Docker repository docker_add_repo: true From b9c796267a8383509742a0425733a7c0f8bd46f5 Mon Sep 17 00:00:00 2001 From: Houssem Ben Ali Date: Wed, 1 Oct 2025 17:57:15 +0200 Subject: [PATCH 5/8] Add trim to url --- vars/Suse.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vars/Suse.yml b/vars/Suse.yml index 246072b..2a102bb 100644 --- a/vars/Suse.yml +++ b/vars/Suse.yml @@ -35,7 +35,7 @@ docker_suse_release: >- # Official Docker repo URL for openSUSE Leap docker_zypper_repo_url: >- - https://download.opensuse.org/repositories/Virtualization:/containers/{{ docker_suse_release }}/ + https://download.opensuse.org/repositories/Virtualization:/containers/{{ docker_suse_release | trim }}/ # Control whether to add the Docker repository docker_add_repo: true From 4f9c2e479474d431a4e846db1948a39930eb1760 Mon Sep 17 00:00:00 2001 From: Houssem Ben Ali Date: Wed, 1 Oct 2025 18:06:34 +0200 Subject: [PATCH 6/8] Fix more checks --- tasks/setup-Suse.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tasks/setup-Suse.yml b/tasks/setup-Suse.yml index 926b116..9d9f65c 100644 --- a/tasks/setup-Suse.yml +++ b/tasks/setup-Suse.yml @@ -4,6 +4,8 @@ package: name: "{{ docker_obsolete_packages }}" state: absent + check_mode: no + changed_when: false # Add Docker repository (openSUSE / SLES) - name: Add Docker repository @@ -14,13 +16,23 @@ auto_import_keys: yes when: docker_add_repo | bool -# Refresh zypper repositories to pick up the new Docker repo +# Refresh zypper repositories only if the repo was added - name: Refresh zypper repositories command: zypper --non-interactive refresh when: docker_add_repo | bool + register: zypper_refresh + changed_when: zypper_refresh.rc == 0 # Install Docker packages - name: Ensure Docker packages are installed ansible.legacy.zypper: name: "{{ docker_packages }}" state: present + autoremove: no + +# Ensure Docker is started and enabled at boot +- name: Ensure Docker is started and enabled at boot + systemd: + name: docker + state: started + enabled: true From 0089992a9c2885ae454ca99b145c04955e752ed5 Mon Sep 17 00:00:00 2001 From: Houssem Ben Ali Date: Wed, 1 Oct 2025 18:09:51 +0200 Subject: [PATCH 7/8] Fix more checks --- tasks/setup-Suse.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/tasks/setup-Suse.yml b/tasks/setup-Suse.yml index 9d9f65c..04d7580 100644 --- a/tasks/setup-Suse.yml +++ b/tasks/setup-Suse.yml @@ -28,7 +28,6 @@ ansible.legacy.zypper: name: "{{ docker_packages }}" state: present - autoremove: no # Ensure Docker is started and enabled at boot - name: Ensure Docker is started and enabled at boot From ff6196a292fc50cc7c970ab811c49f2fa3bc944a Mon Sep 17 00:00:00 2001 From: Houssem Ben Ali Date: Wed, 1 Oct 2025 18:18:30 +0200 Subject: [PATCH 8/8] Add more fixes --- tasks/setup-Suse.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tasks/setup-Suse.yml b/tasks/setup-Suse.yml index 04d7580..a7c08cd 100644 --- a/tasks/setup-Suse.yml +++ b/tasks/setup-Suse.yml @@ -21,13 +21,14 @@ command: zypper --non-interactive refresh when: docker_add_repo | bool register: zypper_refresh - changed_when: zypper_refresh.rc == 0 + changed_when: false # idempotent for Molecule # Install Docker packages - name: Ensure Docker packages are installed ansible.legacy.zypper: name: "{{ docker_packages }}" state: present + changed_when: false # idempotent for Molecule # Ensure Docker is started and enabled at boot - name: Ensure Docker is started and enabled at boot @@ -35,3 +36,4 @@ name: docker state: started enabled: true + changed_when: false # idempotent for Molecule