From b3d21e3ad21a9ea731b5137a6a0e15c033c3a7d9 Mon Sep 17 00:00:00 2001 From: Matt Clay Date: Thu, 27 Mar 2025 09:05:25 -0700 Subject: [PATCH] Fix apt and dpkg_selections tests (#84900) * Fix apt and dpkg_selections tests The tests now support aarch64. They also have reduced dependencies on URLs hosted on third-party servers. * Skip tests on unsupported platforms * Use same package version for both tests * Fix multi-arch support for Ubuntu 22.04 --- test/integration/targets/apt/defaults/main.yml | 3 +-- .../targets/apt/tasks/apt-multiarch.yml | 16 ++++++++++++++++ test/integration/targets/apt/tasks/apt.yml | 14 ++------------ test/integration/targets/apt/tasks/main.yml | 9 ++++----- test/integration/targets/apt/vars/arch/amd64.yml | 1 + test/integration/targets/apt/vars/arch/arm64.yml | 1 + .../targets/dpkg_selections/defaults/main.yaml | 2 +- .../dpkg_selections/tasks/dpkg_selections.yaml | 6 +++++- .../targets/dpkg_selections/tasks/main.yaml | 5 ++++- .../targets/setup_deb_repo/tasks/main.yml | 4 ++-- 10 files changed, 37 insertions(+), 24 deletions(-) create mode 100644 test/integration/targets/apt/vars/arch/amd64.yml create mode 100644 test/integration/targets/apt/vars/arch/arm64.yml diff --git a/test/integration/targets/apt/defaults/main.yml b/test/integration/targets/apt/defaults/main.yml index 7ad2497d470..b22d81bfbfb 100644 --- a/test/integration/targets/apt/defaults/main.yml +++ b/test/integration/targets/apt/defaults/main.yml @@ -1,2 +1 @@ -apt_foreign_arch: i386 -hello_old_version: 2.6-1 +hello_old_version: 2.10-2ubuntu2 diff --git a/test/integration/targets/apt/tasks/apt-multiarch.yml b/test/integration/targets/apt/tasks/apt-multiarch.yml index 01f67662c5d..038e9c06a7e 100644 --- a/test/integration/targets/apt/tasks/apt-multiarch.yml +++ b/test/integration/targets/apt/tasks/apt-multiarch.yml @@ -1,3 +1,19 @@ +- name: get the default arch + command: dpkg --print-architecture + register: default_arch + +- name: select a foreign arch for {{ default_arch.stdout }} + # When adding a new arch, pick a foreign arch hosted on the same repository mirror as the default arch. For example: + # - archive.ubuntu.com hosts both amd64 and i386 + # - ports.ubuntu.com hosts both arm64 and armhf + include_vars: "{{ item }}" + with_first_found: + - "arch/{{ default_arch.stdout }}.yml" + +- name: show the arch selected for multi-arch testing + debug: + msg: Using {{ apt_foreign_arch }} as the foreign arch for {{ default_arch.stdout }} + # verify that apt is handling multi-arch systems properly - name: load version specific vars diff --git a/test/integration/targets/apt/tasks/apt.yml b/test/integration/targets/apt/tasks/apt.yml index dda5fc1fabe..d0762344505 100644 --- a/test/integration/targets/apt/tasks/apt.yml +++ b/test/integration/targets/apt/tasks/apt.yml @@ -1,13 +1,3 @@ -- name: use Debian mirror - set_fact: - distro_mirror: http://ftp.debian.org/debian - when: ansible_distribution == 'Debian' - -- name: use Ubuntu mirror - set_fact: - distro_mirror: http://archive.ubuntu.com/ubuntu - when: ansible_distribution == 'Ubuntu' - # UNINSTALL 'python3-apt' # The `apt` module has the smarts to auto-install `python3-apt`. To test, we # will first uninstall `python3-apt`. @@ -287,7 +277,7 @@ apt: pkg=hello state=absent purge=yes - name: install deb file from URL - apt: deb="{{ distro_mirror }}/pool/main/h/hello/hello_{{ hello_version.stdout }}_{{ hello_architecture.stdout }}.deb" + apt: "deb=https://ci-files.testing.ansible.com/test/integration/targets/apt/hello_{{ hello_old_version }}_{{ hello_architecture.stdout }}.deb" register: apt_url - name: verify installation of hello @@ -468,7 +458,7 @@ # https://github.com/ansible/ansible/issues/65325 - name: Download and install old version of hello (to test allow_change_held_packages option) - apt: "deb=https://ci-files.testing.ansible.com/test/integration/targets/dpkg_selections/hello_{{ hello_old_version }}_amd64.deb" + apt: "deb=https://ci-files.testing.ansible.com/test/integration/targets/apt/hello_{{ hello_old_version }}_{{ hello_architecture.stdout }}.deb" notify: - remove package hello diff --git a/test/integration/targets/apt/tasks/main.yml b/test/integration/targets/apt/tasks/main.yml index e872274ceb5..f9c185eba0f 100644 --- a/test/integration/targets/apt/tasks/main.yml +++ b/test/integration/targets/apt/tasks/main.yml @@ -15,14 +15,16 @@ # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . +- name: skip test on unsupported platforms + meta: end_play + when: ansible_distribution not in ('Ubuntu', 'Debian') + - block: - import_tasks: 'apt.yml' - import_tasks: 'url-with-deps.yml' - import_tasks: 'apt-multiarch.yml' - when: - - ansible_userspace_architecture != apt_foreign_arch - import_tasks: 'apt-builddep.yml' @@ -36,9 +38,6 @@ name: "{{ repodir }}" state: absent - when: - - ansible_distribution in ('Ubuntu', 'Debian') - always: - name: Check if the target is managed by ansible-test stat: diff --git a/test/integration/targets/apt/vars/arch/amd64.yml b/test/integration/targets/apt/vars/arch/amd64.yml new file mode 100644 index 00000000000..05a5780fd34 --- /dev/null +++ b/test/integration/targets/apt/vars/arch/amd64.yml @@ -0,0 +1 @@ +apt_foreign_arch: i386 diff --git a/test/integration/targets/apt/vars/arch/arm64.yml b/test/integration/targets/apt/vars/arch/arm64.yml new file mode 100644 index 00000000000..dfab3c75a95 --- /dev/null +++ b/test/integration/targets/apt/vars/arch/arm64.yml @@ -0,0 +1 @@ +apt_foreign_arch: armhf diff --git a/test/integration/targets/dpkg_selections/defaults/main.yaml b/test/integration/targets/dpkg_selections/defaults/main.yaml index 94bd9bcc3d6..b22d81bfbfb 100644 --- a/test/integration/targets/dpkg_selections/defaults/main.yaml +++ b/test/integration/targets/dpkg_selections/defaults/main.yaml @@ -1 +1 @@ -hello_old_version: 2.6-1 +hello_old_version: 2.10-2ubuntu2 diff --git a/test/integration/targets/dpkg_selections/tasks/dpkg_selections.yaml b/test/integration/targets/dpkg_selections/tasks/dpkg_selections.yaml index 016d7716d03..026b2575f16 100644 --- a/test/integration/targets/dpkg_selections/tasks/dpkg_selections.yaml +++ b/test/integration/targets/dpkg_selections/tasks/dpkg_selections.yaml @@ -1,5 +1,9 @@ +- name: get the default arch + command: dpkg --print-architecture + register: default_arch + - name: download and install old version of hello - apt: "deb=https://ci-files.testing.ansible.com/test/integration/targets/dpkg_selections/hello_{{ hello_old_version }}_amd64.deb" + apt: "deb=https://ci-files.testing.ansible.com/test/integration/targets/dpkg_selections/hello_{{ hello_old_version }}_{{ default_arch.stdout }}.deb" - name: freeze version for hello dpkg_selections: diff --git a/test/integration/targets/dpkg_selections/tasks/main.yaml b/test/integration/targets/dpkg_selections/tasks/main.yaml index abf9fa1b45e..21e44342be6 100644 --- a/test/integration/targets/dpkg_selections/tasks/main.yaml +++ b/test/integration/targets/dpkg_selections/tasks/main.yaml @@ -1,3 +1,6 @@ --- + - name: skip test on unsupported platforms + meta: end_play + when: ansible_distribution not in ('Ubuntu', 'Debian') + - include_tasks: file='dpkg_selections.yaml' - when: ansible_distribution in ('Ubuntu', 'Debian') diff --git a/test/integration/targets/setup_deb_repo/tasks/main.yml b/test/integration/targets/setup_deb_repo/tasks/main.yml index 56c2eac92a3..2b7aeba20d9 100644 --- a/test/integration/targets/setup_deb_repo/tasks/main.yml +++ b/test/integration/targets/setup_deb_repo/tasks/main.yml @@ -69,8 +69,8 @@ lineinfile: path: /etc/apt/sources.list backrefs: True - regexp: ^#\s*deb-src http://archive\.ubuntu\.com/ubuntu/ (\w*){{ item }} universe$ - line: deb-src http://archive.ubuntu.com/ubuntu \1{{ item }} universe + regexp: ^#\s*deb-src (http://.*\.ubuntu\.com/ubuntu.*/) (\w*){{ item }} universe$ + line: deb-src \1 \2{{ item }} universe state: present with_items: - ''