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. 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..a7c08cd --- /dev/null +++ b/tasks/setup-Suse.yml @@ -0,0 +1,39 @@ +--- +# Remove old or conflicting Docker packages +- name: Ensure old versions of Docker are not installed + package: + name: "{{ docker_obsolete_packages }}" + state: absent + check_mode: no + changed_when: false + +# 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 + +# 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: 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 + systemd: + name: docker + state: started + enabled: true + changed_when: false # idempotent for Molecule diff --git a/vars/Suse.yml b/vars/Suse.yml new file mode 100644 index 0000000..2a102bb --- /dev/null +++ b/vars/Suse.yml @@ -0,0 +1,41 @@ +--- +# 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 + - docker-ce + - docker-ce-cli + - docker-buildx-plugin + - docker-ce-rootless-extras + - containerd.io + - runc + +# Packages to install on openSUSE / SLES +# Use 'runc' from repo, not 'docker-runc' (avoids conflicts on Leap 15.6) +docker_packages: + - docker + - containerd + - runc + +# Map SUSE releases to Docker repository paths +docker_suse_release: >- + {% 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 Docker repo URL for openSUSE Leap +docker_zypper_repo_url: >- + https://download.opensuse.org/repositories/Virtualization:/containers/{{ docker_suse_release | trim }}/ + +# Control whether to add the Docker repository +docker_add_repo: true