diff --git a/initializers/custom_links.yml b/initializers/custom_links.yml new file mode 100644 index 0000000..f1b275c --- /dev/null +++ b/initializers/custom_links.yml @@ -0,0 +1,21 @@ +## Possible Choices: +## new_window: +## - True +## - False +## content_type: +## - device +## - site +## - any-other-content-type +## +## Examples: + +# - name: link_to_repo +# text: 'Link to Netbox Docker' +# url: 'https://github.com/netbox-community/netbox-docker' +# new_window: False +# content_type: device +# - name: link_to_localhost +# text: 'Link to localhost' +# url: 'http://localhost' +# new_window: True +# content_type: device diff --git a/initializers/webhooks.yml b/initializers/webhooks.yml new file mode 100644 index 0000000..deb1b39 --- /dev/null +++ b/initializers/webhooks.yml @@ -0,0 +1,27 @@ +## Possible Choices: +## object_types: +## - device +## - site +## - any-other-content-type +## types: +## - type_create +## - type_update +## - type_delete +## Examples: + +# - name: device_creation +# payload_url: 'http://localhost:8080' +# object_types: +# - device +# - cable +# type_create: True +# - name: device_update +# payload_url: 'http://localhost:8080' +# object_types: +# - device +# type_update: True +# - name: device_delete +# payload_url: 'http://localhost:8080' +# object_types: +# - device +# type_delete: True diff --git a/startup_scripts/280_custom_links.py b/startup_scripts/280_custom_links.py new file mode 100644 index 0000000..b2a7df5 --- /dev/null +++ b/startup_scripts/280_custom_links.py @@ -0,0 +1,29 @@ +from django.contrib.contenttypes.models import ContentType +from extras.models import CustomLink +from startup_script_utils import load_yaml +import sys + + +custom_links = load_yaml('/opt/netbox/initializers/custom_links.yml') + +if custom_links is None: + sys.exit() + + +def get_content_type_id(content_type): + try: + return ContentType.objects.get(model=content_type).id + except ContentType.DoesNotExist: + pass + + +for link in custom_links: + content_type = link.pop('content_type') + link['content_type_id'] = get_content_type_id(content_type) + if link['content_type_id'] is None: + print("⚠️ Unable to create Custom Link '{0}': The content_type '{1}' is unknown".format(link.name, content_type)) + continue + + custom_link, created = CustomLink.objects.get_or_create(**link) + if created: + print("🔗 Created Custom Link '{0}'".format(custom_link.name)) diff --git a/startup_scripts/290_webhooks.py b/startup_scripts/290_webhooks.py new file mode 100644 index 0000000..ea8352e --- /dev/null +++ b/startup_scripts/290_webhooks.py @@ -0,0 +1,34 @@ +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))