Compare commits

..

4 commits

Author SHA1 Message Date
2f696c4154
fix notify unit
Some checks failed
/ Ansible Lint (push) Failing after 48s
2025-10-14 03:25:06 +02:00
c0c101fef3
fix onfailure
Some checks failed
/ Ansible Lint (push) Failing after 48s
2025-10-14 02:57:28 +02:00
baca447578
test failure
Some checks failed
/ Ansible Lint (push) Failing after 47s
2025-10-14 02:52:34 +02:00
e616c55edb
WIP: ansible_pull(role): add failure notifications
Some checks failed
/ Ansible Lint (push) Failing after 49s
2025-10-14 02:51:09 +02:00
8 changed files with 49 additions and 4 deletions

View file

@ -1,9 +1,10 @@
# ansible_pull # ansible_pull
# ansible_pull__age_private_key needs to be defined per host (probably HOST.sops.yaml). # ansible_pull__age_private_key needs to be defined per host (probably HOST.sops.yaml).
ansible_pull__repo_url: https://git.hamburg.ccc.de/CCCHH/ansible-infra.git ansible_pull__repo_url: https://git.hamburg.ccc.de/CCCHH/ansible-infra.git
ansible_pull__inventory: inventories/chaosknoten
ansible_pull__playbook: playbooks/maintenance.yaml ansible_pull__playbook: playbooks/maintenance.yaml
ansible_pull__checkout: ansible_pull_notify
ansible_pull__timer_on_calendar: "*-*-* 04:00:00 Europe/Berlin" ansible_pull__timer_on_calendar: "*-*-* 04:00:00 Europe/Berlin"
ansible_pull__failure_notification_address: june+test@jsts.xyz
ansible_pull__timer_randomized_delay_sec: 30min ansible_pull__timer_randomized_delay_sec: 30min
# msmtp # msmtp

View file

@ -13,6 +13,7 @@ Should work on Debian-based distributions.
- `ansible_pull__inventory`: The inventory to use. - `ansible_pull__inventory`: The inventory to use.
- `ansible_pull__playbook`: The playbook to run. - `ansible_pull__playbook`: The playbook to run.
- `ansible_pull__timer_on_calendar`: When to run the playbook. This is the argument to a systemd timers OnCalendar. See the systemd.time man page for reference. - `ansible_pull__timer_on_calendar`: When to run the playbook. This is the argument to a systemd timers OnCalendar. See the systemd.time man page for reference.
- `ansible_pull__failure_notification_address`: The address to send the failure notification to.
## Optional Arguments ## Optional Arguments

View file

@ -16,6 +16,9 @@ argument_specs:
ansible_pull__timer_on_calendar: ansible_pull__timer_on_calendar:
type: str type: str
required: true required: true
ansible_pull__failure_notification_address:
type: str
required: true
ansible_pull__user: ansible_pull__user:
type: str type: str
required: false required: false

View file

@ -0,0 +1,3 @@
---
dependencies:
- role: msmtp

View file

@ -15,6 +15,15 @@
virtualenv: /usr/local/lib/ansible_pull_venv virtualenv: /usr/local/lib/ansible_pull_venv
become: true become: true
- name: ensure ansible-pull-failure-notify script installation exists
ansible.builtin.template:
src: ansible-pull-failure-notify.sh.j2
dest: /usr/local/sbin/ansible-pull-failure-notify.sh
owner: root
group: root
mode: "0755"
become: true
- name: ensure secrets directory exists - name: ensure secrets directory exists
ansible.builtin.file: ansible.builtin.file:
path: /etc/ansible_pull_secrets path: /etc/ansible_pull_secrets
@ -33,14 +42,17 @@
group: "{{ ansible_pull__user }}" group: "{{ ansible_pull__user }}"
become: true become: true
- name: ensure systemd service exists - name: ensure systemd services exists
ansible.builtin.template: ansible.builtin.template:
src: ansible-pull.service.j2 src: "{{ item }}.j2"
dest: /etc/systemd/system/ansible-pull.service dest: "/etc/systemd/system/{{ item }}"
owner: root owner: root
group: root group: root
mode: "0644" mode: "0644"
become: true become: true
loop:
- ansible-pull.service
- ansible-pull-failure-notify.service
notify: notify:
- systemd daemon reload - systemd daemon reload

View file

@ -0,0 +1,7 @@
[Unit]
Description=ansible-pull failure notifier
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/ansible-pull-failure-notify.sh
User=root

View file

@ -0,0 +1,17 @@
#!/usr/bin/env bash
# Ideally we would use --invocation instead of --since, but this isn't supported in the systemd version Debian 12 ships.
ANSIBLE_PULL_LOG=$(journalctl --unit=ansible-pull --identifier=ansible-pull --since=-6h --output=cat)
MESSAGE="Subject: [{{ inventory_hostname }}] ansible-pull: execution failure
An error occured during the ansible-pull execution.
Logs:
""$ANSIBLE_PULL_LOG""
To view the logs yourself run:
journalctl --unit=ansible-pull --identifier=ansible-pull -e
"
printf "$MESSAGE" | msmtp '{{ ansible_pull__failure_notification_address }}'

View file

@ -2,6 +2,7 @@
Description=ansible-pull for configuration and maintenance Description=ansible-pull for configuration and maintenance
After=network-online.target After=network-online.target
Wants=network-online.target Wants=network-online.target
OnFailure=ansible-pull-failure-notify.service
[Service] [Service]
Type=oneshot Type=oneshot