[stable-2.10] systemd - fix issue with capbpf and newer kernel (#72337) (#72347)

* [stable-2.10] 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.
(cherry picked from commit db84e2c989)

Co-authored-by: Sam Doran <sdoran@redhat.com>

* [stable-2.10] systemd - use list-unit-files rather than list-units (#72363)

list-unit-files will return all files on the system. list-units omits those
that are disabled.

Co-authored-by: Ken Dreyer <ktdreyer@ktdreyer.com>
(cherry picked from commit d6115887fa)

* systemd - account for templated unit files when searching for service (#72702)

Related to issue #71528 and PR #72337

Co-authored-by: Martin Polden <mpolden@mpolden.no>
(cherry picked from commit a788ea0132)
pull/72904/head
Sam Doran 4 years ago committed by GitHub
parent 2ff5bf0f21
commit 19bffccd36
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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)

@ -0,0 +1,4 @@
bugfixes:
- >
systemd - account for templated unit files using ``@`` when searching for
the unit file (https://github.com/ansible/ansible/pull/72347#issuecomment-730626228)

@ -0,0 +1,5 @@
bugfixes:
- >
systemd - follow up fix to https://github.com/ansible/ansible/issues/72338
to use ``list-unit-files`` rather than ``list-units`` in order to show
all units files on the system.

@ -414,6 +414,19 @@ def main():
# Check for loading error # Check for loading error
if is_systemd and not is_masked and 'LoadError' in result['status']: 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'])) 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'))
unit, sep, suffix = unit.partition('@')
unit_search = '{unit}{sep}*'.format(unit=unit, sep=sep)
(rc, out, err) = module.run_command("{systemctl} list-unit-files '{unit_search}'".format(systemctl=systemctl, unit_search=unit_search))
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: else:
# list taken from man systemctl(1) for systemd 244 # list taken from man systemctl(1) for systemd 244
valid_enabled_states = [ valid_enabled_states = [

Loading…
Cancel
Save