Refactor alarm compose service and systemctl templates

- Fixed bug where not both alarm services (email + telegram) were triggered.
- Removed direct OnFailure references for email and telegram,
  now handled by unified compose service.
- Introduced 01_core.yml in sys-ctl-alm-compose to structure
  role execution (subservices → core service → test run).
- Added configurable variables SYSTEMCTL_ALARM_COMPOSER_SUBSERVICES
  and SYSTEMCTL_ALARM_COMPOSER_DUMMY_MESSAGE.
- Replaced dedicated @.service template with generic systemctl template
  using systemctl_tpl_* variables for flexibility.
- Updated script.sh.j2 to collect exit codes and print clear errors.
- Fixed typos and streamlined vars in sys-systemctl.

See conversation: https://chatgpt.com/share/68a46172-7c3c-800f-a69c-0cb9edd6839f
This commit is contained in:
2025-08-19 13:35:39 +02:00
parent b1e8339283
commit b49fdc509e
8 changed files with 55 additions and 30 deletions

View File

@@ -0,0 +1,25 @@
- name: "Include dependent services for '{{ systemctl_id }}'"
include_role:
name: '{{ item }}'
loop:
- sys-ctl-alm-telegram
- sys-ctl-alm-email
vars:
flush_handlers: true
systemctl_timer_enabled: false
systemctl_copy_files: true
- name: "Include core service for '{{ systemctl_id }}'"
include_role:
name: sys-systemctl
vars:
flush_handlers: true
systemctl_timer_enabled: false
systemctl_copy_files: true
systemctl_tpl_exec_start: "{{ systemctl_script_exec }} %i"
systemctl_tpl_on_failure: "" # No on failure needed, because it's anyhow the default on failure procedure
- name: "Send message to test service."
systemd:
name: "sys-ctl-alm-compose@{{ SYSTEMCTL_ALARM_COMPOSER_DUMMY_MESSAGE }}.service"
state: started

View File

@@ -1,14 +1,4 @@
- block:
- name: "Include '{{ systemctl_id }}'"
include_role:
name: '{{ item }}'
loop:
- sys-ctl-alm-telegram
- sys-ctl-alm-email
- sys-systemctl
vars:
flush_handlers: true
systemctl_timer_enabled: false
systemctl_copy_files: false
- include_tasks: 01_core.yml
- include_tasks: utils/run_once.yml
when: run_once_sys_ctl_alm_compose is not defined

View File

@@ -0,0 +1,11 @@
#!/bin/bash
err=0
set -u
{% for alarm_service in SYSTEMCTL_ALARM_COMPOSER_SUBSERVICES %}
{% set alarm_service_full_name = alarm_service | get_service_name(SOFTWARE_NAME, '"$1".service') %}
if ! /usr/bin/systemctl start {{ alarm_service_full_name }}; then
echo "ERROR: Failed to start {{ alarm_service_full_name }}" >&2
err=1
fi
{% endfor %}
exit $err

View File

@@ -1,10 +0,0 @@
[Unit]
Description={{ SOFTWARE_NAME }} - Alarm Notifier for %i
[Service]
Type=oneshot
{% for alarm_service in [ SYS_SERVICE_ON_FAILURE_EMAIL, SYS_SERVICE_ON_FAILURE_TELEGRAM ] %}
ExecStart=/usr/bin/systemctl start {{ alarm_service }}
{% endfor %}
User=root
Group=systemd-journal

View File

@@ -1 +1,7 @@
systemctl_id: sys-ctl-alm-compose@
systemctl_id: sys-ctl-alm-compose@
SYSTEMCTL_ALARM_COMPOSER_SUBSERVICES:
- 'sys-ctl-alm-email'
- 'sys-ctl-alm-telegram'
SYSTEMCTL_ALARM_COMPOSER_DUMMY_MESSAGE: "[Info] Dummy Message: No Failure; Ansible is initializing {{ SOFTWARE_NAME }} on {{ inventory_hostname }}."