Ansible notifications

Ansible playbook упал — push на телефон.

SSH key поменялся, package mirror недоступен, host unreachable. Узнайте о failed run сразу, а не после сломанного сервиса.

Shell wrapper

Самый простой вариант для playbook из cron, CI или локального admin host.

#!/bin/bash
set -euo pipefail
export NERVE_DSN="nerve://TOKEN:[email protected]"

if ansible-playbook -i inventory.yml site.yml 2>&1 | tee /tmp/ansible-output.log; then
  echo "Ansible OK: site.yml" | nerve send
else
  echo "ANSIBLE FAILED: site.yml on $(hostname)" | nerve send --severity critical
  tail -20 /tmp/ansible-output.log | nerve send --severity alert
fi

Rescue block внутри playbook

---
- hosts: webservers
  tasks:
    - block:
        - name: Deploy application
          ansible.builtin.shell: /opt/deploy.sh
        - name: Restart service
          ansible.builtin.systemd:
            name: my-app
            state: restarted
      rescue:
        - name: Notify Nerve on failure
          ansible.builtin.shell: |
            echo "Ansible FAILED on {{ inventory_hostname }}: {{ ansible_failed_task.name }}" \
              | nerve send --severity critical
          environment:
            NERVE_DSN: "{{ nerve_dsn }}"
          delegate_to: localhost

Scheduled Ansible из cron

# /etc/cron.d/ansible-nightly
30 2 * * * ansible /usr/local/bin/ansible-with-nerve.sh

GitHub Actions + Ansible

- name: Run Ansible
  id: ansible
  run: ansible-playbook -i inventory.yml site.yml
  continue-on-error: true

- name: Notify on failure
  if: steps.ansible.outcome == 'failure'
  env:
    NERVE_DSN: ${{ secrets.NERVE_DSN }}
  run: echo "Ansible FAILED: ${{ github.repository }}" | nerve send --severity critical

Что включить в сообщение

ПолезноPlaybook, inventory, environment, failed host, короткая ошибка.
ОпасноVault secrets, приватные ключи, полный verbose output.
ЛучшеКороткий push + ссылка на CI/AWX run, где уже есть полный лог.

FAQ

Как получать Ansible уведомления без Telegram?

Добавьте wrapper вокруг ansible-playbook или rescue block, который вызывает nerve send при ошибке.

Работает ли с AWX / Tower?

Да. Нужен шаг или webhook bridge, который выполнит nerve send с коротким summary.