apt: include arch in check for installed packages on multi-arch systems (#24846)
* apt: include arch in check for installed packages on multi-arch systems Thanks: Stefan Löwen <stefan.loewen@gmail.com> Fixes: #24673 * add an integration test for apt's multi-arch handling
This commit is contained in:
parent
758cfeb73e
commit
1f78715848
4 changed files with 42 additions and 1 deletions
|
@ -571,8 +571,13 @@ def install_deb(m, debs, cache, force, install_recommends, allow_unauthenticated
|
|||
pkg = apt.debfile.DebPackage(deb_file)
|
||||
pkg_name = get_field_of_deb(m, deb_file, "Package")
|
||||
pkg_version = get_field_of_deb(m, deb_file, "Version")
|
||||
if len(apt_pkg.get_architectures()) > 1:
|
||||
pkg_arch = get_field_of_deb(m, deb_file, "Architecture")
|
||||
pkg_key = "%s:%s" % (pkg_name, pkg_arch)
|
||||
else:
|
||||
pkg_key = pkg_name
|
||||
try:
|
||||
installed_pkg = apt.Cache()[pkg_name]
|
||||
installed_pkg = apt.Cache()[pkg_key]
|
||||
installed_version = installed_pkg.installed.version
|
||||
if package_version_compare(pkg_version, installed_version) == 0:
|
||||
# Does not need to down-/upgrade, move on to next package
|
||||
|
|
1
test/integration/targets/apt/defaults/main.yml
Normal file
1
test/integration/targets/apt/defaults/main.yml
Normal file
|
@ -0,0 +1 @@
|
|||
apt_foreign_arch: i386
|
32
test/integration/targets/apt/tasks/apt-multiarch.yml
Normal file
32
test/integration/targets/apt/tasks/apt-multiarch.yml
Normal file
|
@ -0,0 +1,32 @@
|
|||
# verify that apt is handling multi-arch systems properly
|
||||
- name: add architecture {{ apt_foreign_arch }}
|
||||
command: dpkg --add-architecture {{ apt_foreign_arch }}
|
||||
|
||||
- name: install hello:{{ apt_foreign_arch }} with apt
|
||||
apt: pkg=hello:{{ apt_foreign_arch }} state=present update_cache=yes
|
||||
|
||||
- name: uninstall hello:{{ apt_foreign_arch }} with apt
|
||||
apt: pkg=hello:{{ apt_foreign_arch }} state=absent purge=yes
|
||||
|
||||
- name: install deb file
|
||||
apt: deb="/var/cache/apt/archives/hello_{{ hello_version.stdout }}_{{ apt_foreign_arch }}.deb"
|
||||
register: apt_multi_initial
|
||||
|
||||
- name: install deb file again
|
||||
apt: deb="/var/cache/apt/archives/hello_{{ hello_version.stdout }}_{{ apt_foreign_arch }}.deb"
|
||||
register: apt_multi_secondary
|
||||
|
||||
- name: verify installation of hello:{{ apt_foreign_arch }}
|
||||
assert:
|
||||
that:
|
||||
- "apt_multi_initial.changed"
|
||||
- "not apt_multi_secondary.changed"
|
||||
|
||||
- name: remove all {{ apt_foreign_arch }} packages
|
||||
apt:
|
||||
name: "*:{{ apt_foreign_arch }}"
|
||||
state: absent
|
||||
purge: yes
|
||||
|
||||
- name: remove {{ apt_foreign_arch }} architecture
|
||||
command: dpkg --remove-architecture {{ apt_foreign_arch }}
|
|
@ -18,5 +18,8 @@
|
|||
- include: 'apt.yml'
|
||||
when: ansible_distribution in ('Ubuntu', 'Debian')
|
||||
|
||||
- include: 'apt-multiarch.yml'
|
||||
when: ansible_distribution in ('Ubuntu', 'Debian') and ansible_userspace_architecture != apt_foreign_arch
|
||||
|
||||
- include: 'apt-builddep.yml'
|
||||
when: ansible_distribution in ('Ubuntu', 'Debian')
|
||||
|
|
Loading…
Reference in a new issue