From 3224e24d7616ae827650b2c065545211e9f38db3 Mon Sep 17 00:00:00 2001 From: Kevin Veen-Birkenbach Date: Thu, 11 Sep 2025 18:24:21 +0200 Subject: [PATCH] Refactor systemd handling - sys-ctl-rpr-btrfs-balancer: suppress service flush for btrfs balancer (too expensive to run each play) - sys-daemon: replace raw systemctl calls with ansible.builtin.systemd (daemon_reload, daemon_reexec) - sys-service: split handler into 'Enable systemctl service' and 'Set systemctl service state', add become, async/poll, suppress flush guard Conversation: https://chatgpt.com/share/68c2f7a6-6fe4-800f-9d79-3e3b0ab4a563 --- roles/sys-ctl-rpr-btrfs-balancer/tasks/01_core.yml | 1 + roles/sys-daemon/handlers/main.yml | 11 ++++++++--- roles/sys-service/handlers/main.yml | 14 ++++++++++++-- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/roles/sys-ctl-rpr-btrfs-balancer/tasks/01_core.yml b/roles/sys-ctl-rpr-btrfs-balancer/tasks/01_core.yml index e88f954e..813228b2 100644 --- a/roles/sys-ctl-rpr-btrfs-balancer/tasks/01_core.yml +++ b/roles/sys-ctl-rpr-btrfs-balancer/tasks/01_core.yml @@ -12,6 +12,7 @@ - include_role: name: sys-service vars: + system_service_suppress_flush: true # It takes a super long time - Better wait for failure of timed service instead of executing it on every play system_service_copy_files: false system_service_on_calendar: "{{ SYS_SCHEDULE_REPAIR_BTRFS_AUTO_BALANCER }}" system_service_timer_enabled: true diff --git a/roles/sys-daemon/handlers/main.yml b/roles/sys-daemon/handlers/main.yml index bd9eac52..4d184ad3 100644 --- a/roles/sys-daemon/handlers/main.yml +++ b/roles/sys-daemon/handlers/main.yml @@ -35,14 +35,19 @@ - reexec systemd manager - name: reload system daemon - command: systemctl daemon-reload + ansible.builtin.systemd: + daemon_reload: true become: true - listen: reload system daemon + listen: + - reload system daemon + - refresh systemctl service async: "{{ ASYNC_TIME if ASYNC_ENABLED | bool else omit }}" poll: "{{ ASYNC_POLL if ASYNC_ENABLED | bool else omit }}" - name: reexec systemd manager - command: systemctl daemon-reexec + # Just execute this during reset, it has potential dangerous side effects + ansible.builtin.systemd: + daemon_reexec: true become: true listen: reexec systemd manager async: "{{ ASYNC_TIME if ASYNC_ENABLED | bool else omit }}" diff --git a/roles/sys-service/handlers/main.yml b/roles/sys-service/handlers/main.yml index f5602a23..29c4d271 100644 --- a/roles/sys-service/handlers/main.yml +++ b/roles/sys-service/handlers/main.yml @@ -1,9 +1,19 @@ -- name: "refresh systemctl service" +- name: "Enable systemctl service" systemd: name: "{{ system_service_id | get_service_name(SOFTWARE_NAME) }}" - daemon_reload: yes enabled: yes + daemon_reload: true + become: true + async: "{{ ASYNC_TIME if ASYNC_ENABLED | bool else omit }}" + poll: "{{ ASYNC_POLL if ASYNC_ENABLED | bool else omit }}" + listen: refresh systemctl service + +- name: "Set systemctl service state" + systemd: + name: "{{ system_service_id | get_service_name(SOFTWARE_NAME) }}" state: "{{ system_service_state }}" + become: true async: "{{ ASYNC_TIME if ASYNC_ENABLED | bool else omit }}" poll: "{{ ASYNC_POLL if ASYNC_ENABLED | bool else omit }}" when: not (system_service_suppress_flush | bool) + listen: refresh systemctl service \ No newline at end of file