From 2ba74deefefd421540b8dfbd714d97c8ffe0af77 Mon Sep 17 00:00:00 2001 From: Karthik Date: Wed, 8 Oct 2025 14:42:52 +0530 Subject: [PATCH 1/6] fix: construct docker apt repo using ansible_facts.lsb.codename (support ubuntu 24.10) -fixes #509 --- tasks/main.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tasks/main.yml b/tasks/main.yml index a434afb..825ed95 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -99,3 +99,12 @@ - include_tasks: docker-users.yml when: at_least_one_user_to_modify is defined +- name: Add Docker apt repo + ansible.builtin.apt_repository: + repo: >- + deb [arch={{ ansible_facts.architecture }}] + {{ docker_repo_url }}/{{ ansible_facts['distribution'] | lower }} + {{ ansible_facts['lsb']['codename'] }} {{ docker_apt_release_channel }} + filename: "{{ docker_apt_filename }}" + state: present + when: docker_add_repo | bool From c77727b12239ec9937eccf04d6f3bfe1eafed3cb Mon Sep 17 00:00:00 2001 From: Nk-dir Date: Wed, 8 Oct 2025 18:07:41 +0000 Subject: [PATCH 2/6] molecule: add prepare playbook and bootstrap packages; guard apt repo for non-Debian --- molecule/default/molecule.yml | 1 + molecule/default/prepare.yml | 34 ++++++++++++++++++++++++++++++++++ tasks/main.yml | 4 ++-- 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 molecule/default/prepare.yml diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml index 3c2f1e5..d209852 100644 --- a/molecule/default/molecule.yml +++ b/molecule/default/molecule.yml @@ -18,4 +18,5 @@ platforms: provisioner: name: ansible playbooks: + prepare: ${MOLECULE_PREPARE_PLAYBOOK:-prepare.yml} converge: ${MOLECULE_PLAYBOOK:-converge.yml} diff --git a/molecule/default/prepare.yml b/molecule/default/prepare.yml new file mode 100644 index 0000000..5119a92 --- /dev/null +++ b/molecule/default/prepare.yml @@ -0,0 +1,34 @@ +--- +- name: Prepare + hosts: all + gather_facts: true + tasks: + - name: Install python3-apt for Debian/Ubuntu + apt: + name: python3-apt + state: present + update_cache: yes + when: ansible_facts.os_family == 'Debian' + + - name: Install common packages for RedHat family (best-effort) + block: + - name: Try to install python3-dnf + package: + name: python3-dnf + state: present + + - name: Try to install python3-libselinux + package: + name: python3-libselinux + state: present + when: ansible_facts.os_family == 'RedHat' + ignore_errors: true + + - name: Install packages for Suse family (best-effort) + block: + - name: Try to install python3-zypp + package: + name: python3-zypp + state: present + when: ansible_facts.os_family == 'Suse' + ignore_errors: true diff --git a/tasks/main.yml b/tasks/main.yml index 825ed95..feceeca 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -104,7 +104,7 @@ repo: >- deb [arch={{ ansible_facts.architecture }}] {{ docker_repo_url }}/{{ ansible_facts['distribution'] | lower }} - {{ ansible_facts['lsb']['codename'] }} {{ docker_apt_release_channel }} + {{ ansible_facts['lsb']['codename'] | default(ansible_facts.get('distribution_release', '')) }} filename: "{{ docker_apt_filename }}" state: present - when: docker_add_repo | bool + when: docker_add_repo | bool and ansible_facts.os_family == 'Debian' From 31a1e4d26d73f9ec7cc9e27acc88ec634513ce34 Mon Sep 17 00:00:00 2001 From: Nk-dir Date: Wed, 8 Oct 2025 18:18:18 +0000 Subject: [PATCH 3/6] fix: construct proper docker apt repo line with release channel and distribution variable --- tasks/main.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tasks/main.yml b/tasks/main.yml index feceeca..fcbb152 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -103,8 +103,9 @@ ansible.builtin.apt_repository: repo: >- deb [arch={{ ansible_facts.architecture }}] - {{ docker_repo_url }}/{{ ansible_facts['distribution'] | lower }} + {{ docker_repo_url }}/{{ docker_apt_ansible_distribution | lower }} {{ ansible_facts['lsb']['codename'] | default(ansible_facts.get('distribution_release', '')) }} + {{ docker_apt_release_channel }} filename: "{{ docker_apt_filename }}" state: present when: docker_add_repo | bool and ansible_facts.os_family == 'Debian' From 9a97e68df9406a6abecfa687f1363714eb2f0665 Mon Sep 17 00:00:00 2001 From: Nk-dir Date: Wed, 8 Oct 2025 18:20:16 +0000 Subject: [PATCH 4/6] ci: trigger workflow rerun From b40ecc1a3e6cc93f2d7a6227eb2fab32caa24f28 Mon Sep 17 00:00:00 2001 From: Nk-dir Date: Wed, 8 Oct 2025 18:24:52 +0000 Subject: [PATCH 5/6] fix: only remove legacy docker.list if it doesn't reference official Docker repo (idempotence) --- tasks/setup-Debian.yml | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/tasks/setup-Debian.yml b/tasks/setup-Debian.yml index ee99bc6..88eda61 100644 --- a/tasks/setup-Debian.yml +++ b/tasks/setup-Debian.yml @@ -16,9 +16,30 @@ state: absent - name: Ensure legacy repo file is not present. - ansible.builtin.file: - path: "/etc/apt/sources.list.d/docker.list" - state: absent + block: + - name: Check for legacy docker.list + ansible.builtin.stat: + path: "/etc/apt/sources.list.d/docker.list" + register: legacy_docker_list + + - name: Remove legacy docker.list if it does not reference the official Docker repo + ansible.builtin.shell: | + legacy_path="/etc/apt/sources.list.d/docker.list" + if [ -f "$legacy_path" ]; then + if grep -q "{{ docker_repo_url }}" "$legacy_path"; then + # file points to official repo; leave it + exit 0 + else + rm -f "$legacy_path" + exit 0 + fi + fi + when: legacy_docker_list.stat.exists + changed_when: "'removed' in ansible_facts.get('cmd', {}) or (legacy_docker_list.stat.exists and (lookup('file', '/etc/apt/sources.list.d/docker.list') | default('') | search(docker_repo_url) == False))" + args: + warn: false + register: remove_legacy_result + failed_when: false - name: Ensure dependencies are installed. ansible.builtin.apt: From e0a31076b3edf7257cd8c996876abbfb69a48aec Mon Sep 17 00:00:00 2001 From: Nk-dir Date: Wed, 8 Oct 2025 18:45:21 +0000 Subject: [PATCH 6/6] fix: safely remove legacy docker.list on Debian without unsupported args/filters --- tasks/setup-Debian.yml | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/tasks/setup-Debian.yml b/tasks/setup-Debian.yml index 88eda61..8592be0 100644 --- a/tasks/setup-Debian.yml +++ b/tasks/setup-Debian.yml @@ -21,25 +21,18 @@ ansible.builtin.stat: path: "/etc/apt/sources.list.d/docker.list" register: legacy_docker_list + - name: Check whether legacy docker.list references the official Docker repo + ansible.builtin.command: + cmd: grep -q "{{ docker_repo_url }}" /etc/apt/sources.list.d/docker.list + register: legacy_grep + ignore_errors: true + changed_when: false - name: Remove legacy docker.list if it does not reference the official Docker repo - ansible.builtin.shell: | - legacy_path="/etc/apt/sources.list.d/docker.list" - if [ -f "$legacy_path" ]; then - if grep -q "{{ docker_repo_url }}" "$legacy_path"; then - # file points to official repo; leave it - exit 0 - else - rm -f "$legacy_path" - exit 0 - fi - fi - when: legacy_docker_list.stat.exists - changed_when: "'removed' in ansible_facts.get('cmd', {}) or (legacy_docker_list.stat.exists and (lookup('file', '/etc/apt/sources.list.d/docker.list') | default('') | search(docker_repo_url) == False))" - args: - warn: false - register: remove_legacy_result - failed_when: false + ansible.builtin.file: + path: "/etc/apt/sources.list.d/docker.list" + state: absent + when: legacy_docker_list.stat.exists and legacy_grep.rc != 0 - name: Ensure dependencies are installed. ansible.builtin.apt: