systemd - fix issue with capbpf and newer kernel (#72337)
A bug existed in systemd 245 that did not properly handle unknown kernel capabilities gracefully. This resulted in incomplete output when querying for the service status. It is possible to get service status by other means. This PR works around this issue by getting service status using other commands in the event of a failure due to this bug.
This commit is contained in:
parent
2293b327c0
commit
db84e2c989
2 changed files with 15 additions and 0 deletions
4
changelogs/fragments/71528-systemd-capbpf-workaround.yml
Normal file
4
changelogs/fragments/71528-systemd-capbpf-workaround.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
bugfixes:
|
||||
- >
|
||||
systemd - work around bug with ``systemd`` 245 and 5.8 kernel that does not correctly
|
||||
report service state (https://github.com/ansible/ansible/issues/71528)
|
|
@ -400,6 +400,17 @@ def main():
|
|||
# Check for loading error
|
||||
if is_systemd and not is_masked and 'LoadError' in result['status']:
|
||||
module.fail_json(msg="Error loading unit file '%s': %s" % (unit, result['status']['LoadError']))
|
||||
|
||||
# Workaround for https://github.com/ansible/ansible/issues/71528
|
||||
elif err and rc == 1 and 'Failed to parse bus message' in err:
|
||||
result['status'] = parse_systemctl_show(to_native(out).split('\n'))
|
||||
|
||||
(rc, out, err) = module.run_command("{systemctl} list-units '{unit}*'".format(systemctl=systemctl, unit=unit))
|
||||
is_systemd = unit in out
|
||||
|
||||
(rc, out, err) = module.run_command("{systemctl} is-active '{unit}'".format(systemctl=systemctl, unit=unit))
|
||||
result['status']['ActiveState'] = out.rstrip('\n')
|
||||
|
||||
else:
|
||||
# list taken from man systemctl(1) for systemd 244
|
||||
valid_enabled_states = [
|
||||
|
|
Loading…
Reference in a new issue