From ef131c7556703915632fbcb4bfbf845758e0dac9 Mon Sep 17 00:00:00 2001 From: Vlad Mencl Date: Sat, 29 Sep 2018 04:05:48 +1200 Subject: [PATCH] module/systemd: fix logic determining if a service needs to be enabled (#46245) * modules/systemd: fix logic: allow scope to default to 'system' Fix logic introduced in 7ea909418e5: if 'scope' param is not specified, it defaults to system, but the value of module.params['scope'] is None, not 'system' - so allow for that. * modules/systemd: fix logic: disabled means disabled Fix logic determining whether a service with both systemd and initd files is enabled or disabled. In situations where systemd thinks service is disabled, but rc.d symlinks mark it as enabled, this module wrongly assumes the service is enabled. Fix this logic: disabled means disabled Only when the output from does NOT include disabled, consider the status of rc.d symlinks. This essentially replicates the fixes done to the systemd handling in the "service" module in 3c89a21e0c0 Fixes #22303 Fixes #44409 --- lib/ansible/modules/system/systemd.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/ansible/modules/system/systemd.py b/lib/ansible/modules/system/systemd.py index 47583ad1c44..fca6714f74b 100644 --- a/lib/ansible/modules/system/systemd.py +++ b/lib/ansible/modules/system/systemd.py @@ -443,10 +443,11 @@ def main(): enabled = True elif rc == 1: # if not a user or global user service and both init script and unit file exist stdout should have enabled/disabled, otherwise use rc entries - if module.params['scope'] == 'system' and \ + if module.params['scope'] in (None, 'system') and \ not module.params['user'] and \ is_initd and \ - (not out.strip().endswith('disabled') or sysv_is_enabled(unit)): + not out.strip().endswith('disabled') and \ + sysv_is_enabled(unit): enabled = True # default to current state