From 00615cc601a3226dd2d686981e79c0b0f29bdb76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Mechnich?= Date: Tue, 16 Apr 2024 23:24:11 +0200 Subject: [PATCH 1/3] modules/apt: add support for apt-patterns --- lib/ansible/modules/apt.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/ansible/modules/apt.py b/lib/ansible/modules/apt.py index 97452f03106..1345a2bb9da 100644 --- a/lib/ansible/modules/apt.py +++ b/lib/ansible/modules/apt.py @@ -637,8 +637,11 @@ def expand_pkgspec_from_fnmatches(m, pkgspec, cache): pkgname_pattern, version_cmp, version = package_split(pkgspec_pattern) + if pkgname_pattern.startswith(('?', '~', '(?', '(~')): + # this is an apt-pattern (https://manpages.debian.org/bookworm/apt/apt-patterns.7.en.html) + new_pkgspec.append(pkgspec_pattern) # note that none of these chars is allowed in a (debian) pkgname - if frozenset('*?[]!').intersection(pkgname_pattern): + elif frozenset('*?[]!').intersection(pkgname_pattern): # handle multiarch pkgnames, the idea is that "apt*" should # only select native packages. But "apt*:i386" should still work if ":" not in pkgname_pattern: @@ -964,7 +967,7 @@ def remove(m, pkgspec, cache, purge=False, force=False, for package in pkgspec: name, version_cmp, version = package_split(package) installed, installed_version, upgradable, has_files = package_status(m, name, version_cmp, version, None, cache, state='remove') - if installed_version or (has_files and purge): + if installed_version or (has_files and purge) or package.startswith(('?', '~', '(?', '(~')): pkg_list.append("'%s'" % package) packages = ' '.join(pkg_list) From 9c38a2809f9508cb47748b7286809652660c91cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Mechnich?= Date: Wed, 17 Apr 2024 00:06:16 +0200 Subject: [PATCH 2/3] add changelog fragment --- changelogs/fragments/83070-add-support-for-apt-patterns.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 changelogs/fragments/83070-add-support-for-apt-patterns.yml diff --git a/changelogs/fragments/83070-add-support-for-apt-patterns.yml b/changelogs/fragments/83070-add-support-for-apt-patterns.yml new file mode 100644 index 00000000000..42aae64b9fe --- /dev/null +++ b/changelogs/fragments/83070-add-support-for-apt-patterns.yml @@ -0,0 +1,2 @@ +minor_changes: + - apt - add support for apt-patterns (https://github.com/ansible/ansible/pull/83070) From 0a9feef7b9b9357434466db8949dffc7c58ae84f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Mechnich?= Date: Wed, 17 Apr 2024 00:21:17 +0200 Subject: [PATCH 3/3] add unit test --- test/units/modules/test_apt.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/units/modules/test_apt.py b/test/units/modules/test_apt.py index d207320c82a..18b16c80d39 100644 --- a/test/units/modules/test_apt.py +++ b/test/units/modules/test_apt.py @@ -38,6 +38,11 @@ fake_cache = [ ["apt", "apt-utils"], id="pkgname-expands", ), + pytest.param( + ["?config-files"], + ["?config-files"], + id="apt-pattern", + ), ], ) def test_expand_pkgspec_from_fnmatches(test_input, expected):