From c4bf168940178771fa6ff2936892060355c9424f Mon Sep 17 00:00:00 2001 From: Adam Miller Date: Wed, 13 Jun 2018 14:01:48 -0500 Subject: [PATCH] service_facts correct meaning of state for systemd service units (#40914) * service_facts correct meaning of state for systemd service units Fixes #40809 Previously this module used the commend `systemctl list-unit-files --type=service` to query state of services but list-unit-files only shows enabled vs disabled which is not what we want for "state" Signed-off-by: Adam Miller * make sure to define service_name before referencing it Signed-off-by: Adam Miller --- lib/ansible/modules/system/service_facts.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/ansible/modules/system/service_facts.py b/lib/ansible/modules/system/service_facts.py index 1038569f68..b884daff7e 100644 --- a/lib/ansible/modules/system/service_facts.py +++ b/lib/ansible/modules/system/service_facts.py @@ -178,16 +178,16 @@ class SystemctlScanService(BaseService): systemctl_path = self.module.get_bin_path("systemctl", opt_dirs=["/usr/bin", "/usr/local/bin"]) if systemctl_path is None: return None - rc, stdout, stderr = self.module.run_command("%s list-unit-files --type=service | tail -n +2 | head -n -2" % systemctl_path, use_unsafe_shell=True) - for line in stdout.split("\n"): - line_data = line.split() - if len(line_data) != 2: - continue - if line_data[1] == "enabled": + rc, stdout, stderr = self.module.run_command("%s list-units --no-pager --type service --all" % systemctl_path, use_unsafe_shell=True) + for line in [svc_line for svc_line in stdout.split('\n') if '.service' in svc_line and 'not-found' not in svc_line]: + service_name = line.split()[0] + if "running" in line: state_val = "running" else: + if 'failed' in line: + service_name = line.split()[1] state_val = "stopped" - services[line_data[0]] = {"name": line_data[0], "state": state_val, "source": "systemd"} + services[service_name] = {"name": service_name, "state": state_val, "source": "systemd"} return services