--- ansible_collections/community/general/plugins/modules/slackpkg.py 2023-12-04 18:10:10.000000000 +0100 +++ ansible_collections/community/general/plugins/modules/slackpkg.py~ 2024-07-03 20:24:44.597126609 +0200 @@ -74,9 +74,43 @@ state: latest ''' +import platform +import os +import re +import glob 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/pkglist" + 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(".* %s.*" % re.escape(str(package)), fh): + pkg_name = line.split(" ")[5] + 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 @@ -87,8 +121,9 @@ # Exception for kernel-headers package on x86_64 if name == 'kernel-headers' and machine == 'x86_64': machine = 'x86' - pattern = re.compile('^%s-[^-]+-(%s|noarch|fw)-[^-]+$' % (re.escape(name), re.escape(machine))) - packages = [f for f in os.listdir('/var/log/packages') if pattern.match(f)] + #pattern = re.compile('^%s-[^-]+-(%s|noarch|fw)-[^-]+$' % (re.escape(name), re.escape(machine))) + #packages = [f for f in os.listdir('/var/log/packages') if pattern.match(f)] + packages = glob.glob("/var/log/packages/%s" % (name)) if len(packages) > 0: return True @@ -194,13 +229,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']: