diff --git a/Ansible/roles/debian_server/files/dvb.service b/Ansible/roles/debian_server/files/dvb.service index 37617a3ea35fc2d5d5708cda417ab4c209799aa9..199fe302849b71e6c3008e75ae6c4eb2c93d3bb1 100644 --- a/Ansible/roles/debian_server/files/dvb.service +++ b/Ansible/roles/debian_server/files/dvb.service @@ -3,6 +3,7 @@ Description=Docker volume backup (dvb) ConditionACPower=true After=local-fs.target +OnFailure=failure-notify@%n.service [Service] Type=exec diff --git a/Ansible/roles/debian_server/files/failure-handler@.service b/Ansible/roles/debian_server/files/failure-handler@.service new file mode 100644 index 0000000000000000000000000000000000000000..76681ee7065a6fa482925b5245ca8ca798440d81 --- /dev/null +++ b/Ansible/roles/debian_server/files/failure-handler@.service @@ -0,0 +1,6 @@ +[Unit] +Description=Failure handler for %i + +[Service] +Type=oneshot +ExecStart=curl "https://notify.shore.co.il/send?message=Service%20$ifailed%20on%20%H." diff --git a/Ansible/roles/debian_server/files/failure-notify@.service b/Ansible/roles/debian_server/files/failure-notify@.service new file mode 100644 index 0000000000000000000000000000000000000000..3853c3b37410f05949b13741e9a3cde71be7dd12 --- /dev/null +++ b/Ansible/roles/debian_server/files/failure-notify@.service @@ -0,0 +1,15 @@ +[Unit] +Description=Send failure notice for %i +After=network-online.target + +[Service] +Type=oneshot +ExecStart=curl https://notify.shore.co.il/send?message=Service%%20%i%%20on%%20%q%%20failed. +DynamicUser=yes +PrivateDevices=yes +ProtectSystem=strict +ProtectHome=yes +PrivateTmp=yes +PrivateIPC=yes +ProtectProc=invisible +PrivateUsers=yes diff --git a/Ansible/roles/debian_server/tasks/main.yml b/Ansible/roles/debian_server/tasks/main.yml index a3a34e326797597949a2f627acfefe129359630b..19dc3870cd8a52d319a7379106643c4df1571d2f 100644 --- a/Ansible/roles/debian_server/tasks/main.yml +++ b/Ansible/roles/debian_server/tasks/main.yml @@ -148,3 +148,42 @@ - toolbx tags: - always + +- name: Add the failure notify service + ansible.builtin.copy: + dest: /etc/systemd/system/ + group: root + mode: preserve + owner: root + src: failure-notify@.service + tags: [notify] + notify: + - Systemd daemon reload + +- name: Create services drop-in directories for failure notifications + loop: ¬ify_failure_units + - containerd.service + - cron.service + - docker.service + - rsyslog.service + - ssh.service + - systemd-networkd.service + - systemd-timesyncd.service + - ufw.service + ansible.builtin.file: + path: /etc/systemd/system/{{ item }}.d + mode: 0o0755 + state: directory + tags: [notify] + +- name: Add failure notification to services + loop: *notify_failure_units + ansible.builtin.copy: + content: | + [Unit] + OnFailure=failure-notify@%n.service + dest: /etc/systemd/system/{{ item }}.d/failure-notify.conf + mode: 0o0644 + tags: [notify] + notify: + - Systemd daemon reload diff --git a/Ansible/roles/debian_server/tasks/maintenance.yml b/Ansible/roles/debian_server/tasks/maintenance.yml index ca0e82ab99bc93c8fd4dc6ea136e649b0838191c..47e722d6c76551c8e1adf60a91ade53a83469087 100644 --- a/Ansible/roles/debian_server/tasks/maintenance.yml +++ b/Ansible/roles/debian_server/tasks/maintenance.yml @@ -60,3 +60,9 @@ name: '{{ item["name"] }}' notify: - Systemd daemon reload + +- name: Create the directory for service overrides + ansible.builtin.file: + mode: 0o0755 + path: /etc/systemd/system/service.d + state: directory diff --git a/Ansible/roles/debian_server/templates/btrfs_check.service.j2 b/Ansible/roles/debian_server/templates/btrfs_check.service.j2 index d7199892a5ca08e1134cd307965d45be45bc689d..7dd59b75d6b00262690dcb41644da854682c4e63 100644 --- a/Ansible/roles/debian_server/templates/btrfs_check.service.j2 +++ b/Ansible/roles/debian_server/templates/btrfs_check.service.j2 @@ -3,6 +3,7 @@ Description=Check btrfs device {{ device }} After=local-fs.target After=network-online.target +OnFailure=failure-notify@%n.service [Service] Type=exec diff --git a/Ansible/roles/debian_server/templates/btrfs_scrub.service.j2 b/Ansible/roles/debian_server/templates/btrfs_scrub.service.j2 index 363628acf603a2c53f392f0cf969244d09893b8d..4278f5293896342464946206fc0d70406c8b12ee 100644 --- a/Ansible/roles/debian_server/templates/btrfs_scrub.service.j2 +++ b/Ansible/roles/debian_server/templates/btrfs_scrub.service.j2 @@ -3,6 +3,7 @@ Description=Scrub btrfs device {{ device }} ConditionACPower=true After=local-fs.target +OnFailure=failure-notify@%n.service [Service] Type=exec diff --git a/Ansible/roles/debian_server/templates/maintenance-task.service.j2 b/Ansible/roles/debian_server/templates/maintenance-task.service.j2 index dc2c57cbc92b036d46dbca0f52ab4c9d50f56b26..109ea5e8930e0cffa86d49fc0af98fa3df053c33 100644 --- a/Ansible/roles/debian_server/templates/maintenance-task.service.j2 +++ b/Ansible/roles/debian_server/templates/maintenance-task.service.j2 @@ -4,6 +4,7 @@ Description={{ description|default(name) }} ConditionACPower=true After=local-fs.target After=network-online.target +OnFailure=failure-notify@%n.service [Service] Type=exec