|
1 | 1 | #!/usr/bin/python
|
2 | 2 | import glob
|
3 |
| -import re |
4 | 3 | import subprocess
|
5 | 4 |
|
6 | 5 | from ansible.module_utils.basic import AnsibleModule
|
7 | 6 | from ansible.module_utils._text import to_text
|
8 | 7 |
|
| 8 | + |
9 | 9 | def main():
|
10 | 10 | module = AnsibleModule(
|
11 | 11 | argument_spec = dict(
|
@@ -33,22 +33,37 @@ def main():
|
33 | 33 | if subprocess.call(["dpkg", "--compare-versions", left, cmp_str, right]) == 0:
|
34 | 34 | latest_kernel = kernel
|
35 | 35 |
|
36 |
| - booted_kernel = "/lib/modules/{}".format(to_text(subprocess.check_output(["uname", "-r"]).strip)) |
| 36 | + booted_kernel = "/lib/modules/{}".format(to_text( |
| 37 | + subprocess.run(["uname", "-r"], capture_output=True).stdout.strip)) |
37 | 38 |
|
38 | 39 | booted_kernel_package = ""
|
39 | 40 | old_kernel_packages = []
|
40 | 41 | if params['lookup_packages']:
|
41 | 42 | for kernel in kernels:
|
42 | 43 | # Identify the currently booted kernel and unused old kernels by
|
43 |
| - # querying which packages owns the directory in /lib/modules |
| 44 | + # querying which packages own directories in /lib/modules |
| 45 | + try: |
| 46 | + sp = subprocess.run(["dpkg-query", "-S", kernel], |
| 47 | + check=True, capture_output=True) |
| 48 | + except subprocess.CalledProcessError as e: |
| 49 | + # Ignore errors about directories not associated with a package |
| 50 | + if e.stderr.startswith(b"dpkg-query: no path found matching"): |
| 51 | + continue |
| 52 | + raise e |
44 | 53 | if kernel.split("/")[-1] == booted_kernel.split("/")[-1]:
|
45 |
| - booted_kernel_package = to_text(subprocess.check_output(["dpkg-query", "-S", kernel])).split(":")[0] |
| 54 | + booted_kernel_package = to_text(sp.stdout).split(":")[0] |
46 | 55 | elif kernel != latest_kernel:
|
47 |
| - old_kernel_packages.append(to_text(subprocess.check_output(["dpkg-query", "-S", kernel])).split(":")[0]) |
| 56 | + old_kernel_packages.append(to_text(sp.stdout).split(":")[0]) |
48 | 57 |
|
49 | 58 | # returns True if we're not booted into the latest kernel
|
50 | 59 | new_kernel_exists = booted_kernel.split("/")[-1] != latest_kernel.split("/")[-1]
|
51 |
| - module.exit_json(changed=False, new_kernel_exists=new_kernel_exists, old_packages=old_kernel_packages, booted_package=booted_kernel_package) |
| 60 | + module.exit_json( |
| 61 | + changed=False, |
| 62 | + new_kernel_exists=new_kernel_exists, |
| 63 | + old_packages=old_kernel_packages, |
| 64 | + booted_package=booted_kernel_package |
| 65 | + ) |
| 66 | + |
52 | 67 |
|
53 | 68 | if __name__ == '__main__':
|
54 | 69 | main()
|
0 commit comments