From f381aedff57d889cd4a58299e793b252422974a7 Mon Sep 17 00:00:00 2001 From: Julian Rother Date: Wed, 12 Feb 2025 19:28:00 +0100 Subject: [PATCH] Initial commit --- files/netbox-webhook-handler | 36 ++++++++++++++++++++++++++++ files/netbox-webhook-handler.service | 10 ++++++++ handlers/main.yml | 6 +++++ tasks/main.yml | 31 ++++++++++++++++++++++++ 4 files changed, 83 insertions(+) create mode 100755 files/netbox-webhook-handler create mode 100644 files/netbox-webhook-handler.service create mode 100644 handlers/main.yml create mode 100644 tasks/main.yml diff --git a/files/netbox-webhook-handler b/files/netbox-webhook-handler new file mode 100755 index 0000000..ae312e0 --- /dev/null +++ b/files/netbox-webhook-handler @@ -0,0 +1,36 @@ +#!/bin/python3 +import threading +import subprocess +import logging +import time + +import bottle + + +class HandlerThread(threading.Thread): + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.trigger = threading.Event() + self.trigger.set() + + def run(self): + while True: + self.trigger.wait() + self.trigger.clear() + result = subprocess.run(['/etc/netbox_webhook_handler.sh']) + if result.returncode: + logging.warning(f'Handler exited with non-zero exit code {result.returncode}') + time.sleep(10) + + +handler_thread = HandlerThread(daemon=True) + + +@bottle.route('/webhook', method='POST') +def webhook(): + handler_thread.trigger.set() + + +if __name__ == '__main__': + handler_thread.start() + bottle.run(host='127.0.0.1', port=8433) diff --git a/files/netbox-webhook-handler.service b/files/netbox-webhook-handler.service new file mode 100644 index 0000000..b20f7d4 --- /dev/null +++ b/files/netbox-webhook-handler.service @@ -0,0 +1,10 @@ +[Unit] +Description=Netbox Webhook Handler +After=network.target + +[Service] +ExecStart=/usr/local/sbin/netbox-webhook-handler + +[Install] +WantedBy=multi-user.target + diff --git a/handlers/main.yml b/handlers/main.yml new file mode 100644 index 0000000..5cbb464 --- /dev/null +++ b/handlers/main.yml @@ -0,0 +1,6 @@ +- name: restart netbox-webhook-handler + service: + name: netbox-webhook-handler + enabled: True + daemon_reload: True + state: restarted diff --git a/tasks/main.yml b/tasks/main.yml new file mode 100644 index 0000000..5451558 --- /dev/null +++ b/tasks/main.yml @@ -0,0 +1,31 @@ +- name: install dependencies + apt: + pkg: + - python3-bottle + +- name: Copy netbox webhook handler script + notify: restart netbox-webhook-handler + copy: + content: '{{ netbox_webhook_handler_script }}' + dest: /etc/netbox_webhook_handler.sh + owner: root + group: root + mode: 0750 + +- name: Copy netbox-webhook-handler + notify: restart netbox-webhook-handler + copy: + src: netbox-webhook-handler + dest: /usr/local/sbin/netbox-webhook-handler + owner: root + group: root + mode: 0755 + +- name: Copy systemd service file + notify: restart netbox-webhook-handler + copy: + src: netbox-webhook-handler.service + dest: /etc/systemd/system + owner: root + group: root + mode: 0644