From aec6dc3b26a110ca4a9ffab3e1837a387b3f418a Mon Sep 17 00:00:00 2001 From: Strahinja Kustudic Date: Wed, 4 Sep 2019 21:18:43 +0200 Subject: [PATCH] systemd module will now wait on deactivating state (#59471) (#60939) * systemd module will now wait on deactivating state (#59471) If a service is in the 'deactivating' state running systemctl stop foo, would wait for the foo service to actually stop before it exits. The module didn't behave like that and it considered the deactivating state as if the service wasn't running. This change will align the module with the systemctl behaviour. (cherry picked from commit 54d9d7805dc0a905fb9b2ad11746cfdc7ac03a53) * Fix systemd start state with deactivating service state (cherry picked from commit ee4b3b8854033e44cf945b6709a8a0e81a8cae46) --- .../fragments/59471-systemd-wait-while-deactivating.yaml | 2 ++ lib/ansible/modules/system/systemd.py | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 changelogs/fragments/59471-systemd-wait-while-deactivating.yaml diff --git a/changelogs/fragments/59471-systemd-wait-while-deactivating.yaml b/changelogs/fragments/59471-systemd-wait-while-deactivating.yaml new file mode 100644 index 00000000000..455992dfb2a --- /dev/null +++ b/changelogs/fragments/59471-systemd-wait-while-deactivating.yaml @@ -0,0 +1,2 @@ +bugfixes: + - systemd - wait for a service which is in deactivating state when using ``state=stopped`` (https://github.com/ansible/ansible/pull/59471) diff --git a/lib/ansible/modules/system/systemd.py b/lib/ansible/modules/system/systemd.py index 10c9e42f253..0f652db94ed 100644 --- a/lib/ansible/modules/system/systemd.py +++ b/lib/ansible/modules/system/systemd.py @@ -272,6 +272,10 @@ def is_running_service(service_status): return service_status['ActiveState'] in set(['active', 'activating']) +def is_deactivating_service(service_status): + return service_status['ActiveState'] in set(['deactivating']) + + def request_was_ignored(out): return '=' not in out and 'ignoring request' in out @@ -492,7 +496,7 @@ def main(): if not is_running_service(result['status']): action = 'start' elif module.params['state'] == 'stopped': - if is_running_service(result['status']): + if is_running_service(result['status']) or is_deactivating_service(result['status']): action = 'stop' else: if not is_running_service(result['status']):