From f4a380d802367fe96fcde7257602ccefbe5161f6 Mon Sep 17 00:00:00 2001 From: Kevin Veen-Birkenbach Date: Wed, 20 Aug 2025 14:58:11 +0200 Subject: [PATCH] Optimized alarm and system handlers --- roles/sys-ctl-alm-email/tasks/01_core.yml | 6 ++++-- roles/sys-ctl-alm-telegram/tasks/01_core.yml | 4 ++++ roles/sys-ctl-alm-telegram/templates/script.sh.j2 | 2 +- roles/sys-daemon/tasks/none.yml | 0 roles/sys-service/defaults/main.yml | 2 +- roles/sys-service/tasks/05_service.yml | 1 + roles/sys-service/tasks/main.yml | 10 ++++++++-- roles/sys-service/templates/systemctl.service.j2 | 11 +++++++---- 8 files changed, 26 insertions(+), 10 deletions(-) create mode 100644 roles/sys-daemon/tasks/none.yml diff --git a/roles/sys-ctl-alm-email/tasks/01_core.yml b/roles/sys-ctl-alm-email/tasks/01_core.yml index 493e26b2..7723932a 100644 --- a/roles/sys-ctl-alm-email/tasks/01_core.yml +++ b/roles/sys-ctl-alm-email/tasks/01_core.yml @@ -6,5 +6,7 @@ - include_role: name: sys-service - - + vars: + # If the email notifier fails, trigger the Telegram notifier, + # passing the failing unit's name as the instance text. + system_service_tpl_on_failure: "{{ ('sys-ctl-alm-telegram@') | get_service_name(SOFTWARE_NAME, False) }}%n.service" diff --git a/roles/sys-ctl-alm-telegram/tasks/01_core.yml b/roles/sys-ctl-alm-telegram/tasks/01_core.yml index eac2da07..455f2eee 100644 --- a/roles/sys-ctl-alm-telegram/tasks/01_core.yml +++ b/roles/sys-ctl-alm-telegram/tasks/01_core.yml @@ -12,6 +12,10 @@ - include_role: name: sys-service + vars: + # If the Telegram notifier fails, trigger the Email notifier, + # passing the failing unit's name as the instance text. + system_service_tpl_on_failure: "{{ ('sys-ctl-alm-email@') | get_service_name(SOFTWARE_NAME, False) }}%n.service" - name: install curl community.general.pacman: diff --git a/roles/sys-ctl-alm-telegram/templates/script.sh.j2 b/roles/sys-ctl-alm-telegram/templates/script.sh.j2 index 6520344e..ab3662d5 100644 --- a/roles/sys-ctl-alm-telegram/templates/script.sh.j2 +++ b/roles/sys-ctl-alm-telegram/templates/script.sh.j2 @@ -15,4 +15,4 @@ fi /usr/bin/curl -s -X POST \ "https://api.telegram.org/bot{{ telegram_bot_token }}/sendMessage" \ -d chat_id="{{ telegram_chat_id }}" \ - --data-urlencode text="service ${friendly} on ${host} failed" + --data-urlencode text="service ${friendly//\//-} on ${host} failed" diff --git a/roles/sys-daemon/tasks/none.yml b/roles/sys-daemon/tasks/none.yml new file mode 100644 index 00000000..e69de29b diff --git a/roles/sys-service/defaults/main.yml b/roles/sys-service/defaults/main.yml index 2124471f..da5b6d3f 100644 --- a/roles/sys-service/defaults/main.yml +++ b/roles/sys-service/defaults/main.yml @@ -1,3 +1,3 @@ -SYS_SERVICE_ALL_ENABLED: "{{ not MODE_DEBUG }}" +SYS_SERVICE_ALL_ENABLED: "{{ MODE_DEBUG }}" SYS_SERVICE_DEFAULT_STATE: "{{ 'restarted' if MODE_DEBUG else omit }}" SYS_SERVICE_DEFAULT_RUNTIME: "86400s" # Maximum total runtime a service is allowed to run before being stopped \ No newline at end of file diff --git a/roles/sys-service/tasks/05_service.yml b/roles/sys-service/tasks/05_service.yml index 1a08a55c..9e5cd549 100644 --- a/roles/sys-service/tasks/05_service.yml +++ b/roles/sys-service/tasks/05_service.yml @@ -42,3 +42,4 @@ notify: refresh systemctl service when: not system_service_uses_at when: SYS_SERVICE_ALL_ENABLED | bool + diff --git a/roles/sys-service/tasks/main.yml b/roles/sys-service/tasks/main.yml index a406690c..5f16e855 100644 --- a/roles/sys-service/tasks/main.yml +++ b/roles/sys-service/tasks/main.yml @@ -1,3 +1,9 @@ +- name: "Reload sys-daemon handlers" + include_tasks: "{{ playbook_dir }}/tasks/utils/load_handlers.yml" + vars: + handler_role_name: "sys-daemon" + when: run_once_sys_service is defined + - block: - include_tasks: 01_core.yml - include_tasks: utils/run_once.yml @@ -7,6 +13,6 @@ block: - name: "Load base routine for '{{ system_service_id }}'" include_tasks: 03_base.yml - - name: "Flush system handlers for '{{ system_service_id }}'" + - name: "Flush system service handlers for '{{ system_service_id }}'" meta: flush_handlers - when: system_service_id is defined \ No newline at end of file + when: system_service_id is defined diff --git a/roles/sys-service/templates/systemctl.service.j2 b/roles/sys-service/templates/systemctl.service.j2 index 3569e8e4..0fd74958 100644 --- a/roles/sys-service/templates/systemctl.service.j2 +++ b/roles/sys-service/templates/systemctl.service.j2 @@ -1,14 +1,17 @@ [Unit] Description={{ SOFTWARE_NAME }} - Service for role '{{ system_service_id }}' {{- system_service_tpl_on_failure | systemd_directive('OnFailure') }} +StartLimitIntervalSec=60 +StartLimitBurst=3 +OnFailureJobMode=replace-irreversibly [Service] Type={{ system_service_tpl_type }} -{%- for key, val in [ +{% for key, val in [ ('TimeoutStartSec', system_service_tpl_timeout_start_sec), ('ExecStartPre', system_service_tpl_exec_start_pre), ('ExecStart', system_service_tpl_exec_start), ('RuntimeMaxSec', system_service_tpl_runtime) -] -%} -{{- val | systemd_directive(key) }} -{%- endfor %} +] %} +{{ val | systemd_directive(key) }} +{% endfor %} \ No newline at end of file