--- ansible_collections/community/general/plugins/modules/slackpkg.py 2023-12-04 18:10:10.000000000 +0100 +++ ansible_collections/community/general/plugins/modules/slackpkg.py.BBqse 2024-07-03 17:55:58.652562080 +0200 @@ -74,9 +74,42 @@ state: latest ''' +import platform +import os +import re from ansible.module_utils.basic import AnsibleModule +# check package(s) at PACKAGES.TXT file +# and return a list of valid package names +def get_packages(module, slackpkg_path, packages): + + package_c = 0 + pkgs = [] + machine = platform.machine() + + for package in packages: + + # Exception for kernel-headers package on x86_64 + if package == "kernel-headers" and machine == "x86_64": + machine = "x86" + + PKG_FILE = "/var/lib/slackpkg/PACKAGES.TXT" + pattern = re.compile('%s.*-(%s|noarch|fw)-[^-]+$' % (re.escape(str(package)), re.escape(machine))) + + fh = open(PKG_FILE, "r").read() + for line in re.findall("PACKAGE NAME: %s.*" % re.escape(str(package)), fh): + pkg_name = line.split(":")[1].replace(' ','').replace('.txz','') + if pattern.match(pkg_name): + package_c += 1 + pkgs.append(pkg_name) + break + + if not package_c > 0: + module.fail_json(msg="package %s not at PACKAGES.TXT" % package) + + return pkgs + def query_package(module, slackpkg_path, name): import platform @@ -194,13 +227,20 @@ pkgs = p['name'] + # format pkgs list + pkgs = (' '.join(map(str, pkgs))).replace(',',' ') + pkgs = " ".join(pkgs.split()) + pkgs = list(pkgs.split(' ')) + if p["update_cache"]: update_cache(module, slackpkg_path) if p['state'] == 'latest': + pkgs = get_packages(module, slackpkg_path, pkgs) upgrade_packages(module, slackpkg_path, pkgs) elif p['state'] in ['present', 'installed']: + pkgs = get_packages(module, slackpkg_path, pkgs) install_packages(module, slackpkg_path, pkgs) elif p["state"] in ['removed', 'absent']: