1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

apt_rpm: add check if package version is upgradable (ansible-collections#7414) (#7577)

* apt_rpm: add check if package version is upgradable (ansible-collections#7414)

* add changelog fragment

* apt_rpm: apply the recommended changes and fix the sanity checks

---------

Co-authored-by: Nikolay Burykin <bne@altlinux.org>
This commit is contained in:
burykinne 2023-12-02 23:00:04 +03:00 committed by GitHub
parent 30edafabe7
commit ecea4a2f38
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 1 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- apt-rpm - the module did not upgrade packages if a newer version exists. Now the package will be reinstalled if the candidate is newer than the installed version (https://github.com/ansible-collections/community.general/issues/7414).

View file

@ -115,6 +115,7 @@ EXAMPLES = '''
''' '''
import os import os
import re
import traceback import traceback
from ansible.module_utils.basic import ( from ansible.module_utils.basic import (
@ -132,6 +133,7 @@ else:
HAS_RPM_PYTHON = True HAS_RPM_PYTHON = True
RPM_PYTHON_IMPORT_ERROR = None RPM_PYTHON_IMPORT_ERROR = None
APT_CACHE = "/usr/bin/apt-cache"
APT_PATH = "/usr/bin/apt-get" APT_PATH = "/usr/bin/apt-get"
RPM_PATH = "/usr/bin/rpm" RPM_PATH = "/usr/bin/rpm"
APT_GET_ZERO = "\n0 upgraded, 0 newly installed" APT_GET_ZERO = "\n0 upgraded, 0 newly installed"
@ -165,6 +167,19 @@ def query_package(module, name):
return False return False
def check_package_version(module, name):
# compare installed and candidate version
# if newest version already installed return True
# otherwise return False
rc, out, err = module.run_command([APT_CACHE, "policy", name], environ_update={"LANG": "C"})
installed = re.split("\n |: ", out)[2]
candidate = re.split("\n |: ", out)[4]
if installed >= candidate:
return True
return False
def query_package_provides(module, name): def query_package_provides(module, name):
# rpm -q returns 0 if the package is installed, # rpm -q returns 0 if the package is installed,
# 1 if it is not installed # 1 if it is not installed
@ -179,7 +194,11 @@ def query_package_provides(module, name):
name = local_rpm_package_name(name) name = local_rpm_package_name(name)
rc, out, err = module.run_command("%s -q --provides %s" % (RPM_PATH, name)) rc, out, err = module.run_command("%s -q --provides %s" % (RPM_PATH, name))
return rc == 0 if rc == 0:
if check_package_version(module, name):
return True
else:
return False
def update_package_db(module): def update_package_db(module):