From 4fe3aea3a941f45d8655eacbaf06e9ba5e8db986 Mon Sep 17 00:00:00 2001 From: Ross Williams Date: Fri, 8 Oct 2021 19:02:07 +0000 Subject: [PATCH] pkgng: package reinstallations count as changed `upgrade_packages()` only looked for the string "Number of packages to be upgraded", but the `pkg upgrade` command also reports "Number of packages to be reinstalled". Reinstallation occurs when package metadata other than version changes (e.g. build options, single architecture to `*` architecture). In any other respect, though, a required reinstallation is the same as an upgrade. --- changelogs/fragments/3526-pkgng-add-integration-tests.yml | 2 ++ plugins/modules/packaging/os/pkgng.py | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 changelogs/fragments/3526-pkgng-add-integration-tests.yml diff --git a/changelogs/fragments/3526-pkgng-add-integration-tests.yml b/changelogs/fragments/3526-pkgng-add-integration-tests.yml new file mode 100644 index 0000000000..150b9435df --- /dev/null +++ b/changelogs/fragments/3526-pkgng-add-integration-tests.yml @@ -0,0 +1,2 @@ +bugfixes: + - 'pkgng - `name=* state=latest` check for upgrades did not count "Number of packages to be reinstalled" as a `changed` action, giving incorrect results in both regular and check mode' diff --git a/plugins/modules/packaging/os/pkgng.py b/plugins/modules/packaging/os/pkgng.py index 4b033dd738..5d45820521 100644 --- a/plugins/modules/packaging/os/pkgng.py +++ b/plugins/modules/packaging/os/pkgng.py @@ -191,9 +191,10 @@ def upgrade_packages(module, pkgng_path, dir_arg): cmd += " -n" rc, out, err = module.run_command(cmd) - match = re.search('^Number of packages to be upgraded: ([0-9]+)', out, re.MULTILINE) - if match: - upgraded_c = int(match.group(1)) + for action in ('upgraded', 'reinstalled',): + match = re.search('^Number of packages to be %s: ([0-9]+)' % (action,), out, re.MULTILINE) + if match: + upgraded_c += int(match.group(1)) if upgraded_c > 0: return (True, "updated %s package(s)" % upgraded_c, out, err)