Teilnehmer sollen nach diesem Abschnitt in der Lage sein:
curl auszulösenEvent-Driven Ansible (EDA) erweitert das klassische Ansible-Modell um reaktive Eventverarbeitung. Statt Playbooks manuell auszuführen, werden diese durch externe Ereignisse ausgelöst (z. B. Webhooks, Kafka, Redis).
Ablaufmodell:
run_playbook)eda-demo/
├── rulebook.yml
├── playbooks/
│ └── hello.yml
└── inventory.yml
rulebook.yml
- name: Webhook-Demo
hosts: localhost
sources:
- ansible.eda.webhook:
host: 0.0.0.0
port: 5000
endpoint: /event
rules:
- name: Event empfangen und reagieren
condition: event.payload.message is defined
action:
run_playbook:
name: playbooks/hello.yml
extra_vars:
eingang: "{{ event.payload.message }}"playbooks/hello.yml
- name: Dummy-Playbook
hosts: localhost
gather_facts: false
tasks:
- name: Nachricht ausgeben
debug:
msg: "Webhook sagte: {{ eingang }}"inventory.yml
all:
hosts:
localhost:
ansible_connection: localansible-rulebook \
--rulebook rulebook.yml \
--inventory inventory.yml \
--verbosecurlcurl -X POST http://localhost:5000/event \
-H 'Content-Type: application/json' \
-d '{"message": "Hallo Schulungsteilnehmer"}'Erwartung:
/etc/systemd/system/ansible-eda.service
[Unit]
Description=EDA Listener
After=network.target
[Service]
ExecStart=/usr/local/bin/ansible-rulebook \
--rulebook /opt/eda-demo/rulebook.yml \
--inventory /opt/eda-demo/inventory.yml
WorkingDirectory=/opt/eda-demo
Restart=always
[Install]
WantedBy=multi-user.targetZiel: Reagieren auf Änderungen einer Konfigurationsdatei und entsprechendes Playbook ausführen.
rulebook.yml
- name: File-Watcher
hosts: localhost
sources:
- ansible.eda.file:
path: /tmp/demo.conf
ignore_initial: true
rules:
- name: Datei wurde geändert
condition: event.payload.src_path.endswith("demo.conf")
action:
run_playbook:
name: playbooks/on_file_change.yml
extra_vars:
changed_file: "{{ event.payload.src_path }}"playbooks/on_file_change.yml
- name: Reaktion auf Dateiänderung
hosts: localhost
gather_facts: false
tasks:
- name: Ausgabe der geänderten Datei
debug:
msg: "Geänderte Datei: {{ changed_file }}"Test:
echo "Änderung $(date)" >> /tmp/demo.confErwartung:
Neben webhook und file bietet EDA weitere
Eventquellen. Hier eine Übersicht der unterstützten Plugins mit
typischen Szenarien:
sources:
- ansible.eda.kafka:
host: kafka.example.com
port: 9092
topic: system-events
group_id: eda-groupUse Case: Infrastrukturereignisse in Echtzeit (z. B. Security Alerts, Service-Status)
sources:
- ansible.eda.redis:
host: redis.example.com
port: 6379
channels:
- alertsUse Case: Push-Nachrichten aus SIEM-Systemen oder Zwischenpuffern
sources:
- ansible.eda.webhook:
host: 0.0.0.0
port: 9093
endpoint: /alertmanagerUse Case: Automatisierte Reaktionen auf Metrik-basierte Alerts
Bereits gezeigt, aber auch geeignet für:
Neben run_playbook sind weitere Aktionen möglich:
print_event: Debug-Ausgabeset_fact: Eventdaten zwischenspeichernshutdown: Prozess gezielt beendenrun_module: Direktmodul ohne Playbook (z. B. ping)Diese lassen sich beliebig kombinieren, filtern und verschachteln.
Damit ist EDA nicht nur ein Event-Trigger, sondern eine generische Entscheidungs- und Automatisierungslogik – eingebettet in die bestehende Ansible-Umgebung.