Newer
Older
netbox-docker / startup_scripts / 290_webhooks.py
@Christian Mäder Christian Mäder on 8 Feb 2021 915 bytes Adjust to repository standards
from django.contrib.contenttypes.models import ContentType
from extras.models import Webhook
from startup_script_utils import load_yaml
import sys


webhooks = load_yaml('/opt/netbox/initializers/webhooks.yml')

if webhooks is None:
  sys.exit()


def get_content_type_id(hook_name, content_type):
  try:
    return ContentType.objects.get(model=content_type).id
  except ContentType.DoesNotExist as ex:
    print("⚠️ Webhook '{0}': The object_type '{1}' is unknown.".format(hook_name, content_type))
    raise ex


for hook in webhooks:
  obj_types = hook.pop('object_types')

  try:
    obj_type_ids = [get_content_type_id(hook['name'], obj) for obj in obj_types]
  except ContentType.DoesNotExist:
    continue

  webhook, created = Webhook.objects.get_or_create(**hook)
  if created:
    webhook.content_types.set(obj_type_ids)
    webhook.save()

    print("🪝 Created Webhook {0}".format(webhook.name))