systemd_service: handle failure when mask operation fails (#83079)

* Handle the mask operation failure instead of just
  marking state changed.

Fixes: #81649

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
Abhijeet Kasurde 2024-04-18 09:28:30 -07:00 committed by GitHub
parent ae2234f185
commit 5dac5d365a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 45 additions and 0 deletions

View File

@ -0,0 +1,3 @@
---
bugfixes:
- systemd_service - handle mask operation failure (https://github.com/ansible/ansible/issues/81649).

View File

@ -495,6 +495,8 @@ def main():
if rc != 0:
# some versions of system CAN mask/unmask non existing services, we only fail on missing if they don't
fail_if_missing(module, found, unit, msg='host')
# here if service was not missing, but failed for other reasons
module.fail_json(msg=f"Failed to {action} the service ({unit}): {err.strip()}")
# Enable/disable service startup at boot if requested
if module.params['enabled'] is not None:

View File

@ -15,3 +15,8 @@
file:
path: /etc/systemd/system/baz.service
state: absent
- name: remove mask unit file
file:
path: /etc/systemd/system/mask_me.service
state: absent

View File

@ -121,3 +121,4 @@
- import_tasks: test_unit_template.yml
- import_tasks: test_indirect_service.yml
- import_tasks: test_enabled_runtime.yml
- import_tasks: test_mask.yml

View File

@ -0,0 +1,25 @@
- name: Copy service file for mask operation
template:
src: mask_me.service
dest: /etc/systemd/system/mask_me.service
owner: root
group: root
mode: '0644'
notify: remove unit file
- name: Reload systemd
systemd:
daemon_reload: true
- name: Try to mask already masked service
systemd:
name: mask_me.service
masked: true
register: mask_test_1
ignore_errors: true
- name: Test mask service test
assert:
that:
- mask_test_1 is not changed
- "'Failed to mask' in mask_test_1.msg"

View File

@ -0,0 +1,9 @@
[Unit]
Description=Mask Me Server
Documentation=Mask
[Service]
ExecStart=/bin/yes
[Install]
WantedBy=default.target