From 6e2b06236dacf7dead755004dee03dd353db685b Mon Sep 17 00:00:00 2001 From: yann degat Date: Thu, 15 Jun 2023 13:29:32 +0200 Subject: [PATCH] add support for config_templates --- .../initializers/__init__.py | 2 ++ .../initializers/config_templates.py | 35 +++++++++++++++++++ .../initializers/devices.py | 8 +++-- .../initializers/yaml/config_templates.yml | 6 ++++ .../initializers/yaml/devices.yml | 2 ++ 5 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 src/netbox_initializers/initializers/config_templates.py create mode 100644 src/netbox_initializers/initializers/yaml/config_templates.yml diff --git a/src/netbox_initializers/initializers/__init__.py b/src/netbox_initializers/initializers/__init__.py index e0e0b29..93cf08e 100644 --- a/src/netbox_initializers/initializers/__init__.py +++ b/src/netbox_initializers/initializers/__init__.py @@ -13,6 +13,7 @@ "custom_fields", "custom_links", "tags", + "config_templates", "webhooks", "tenant_groups", "tenants", @@ -151,6 +152,7 @@ def register_initializer(name: str, initializer): from .cluster_groups import ClusterGroupInitializer from .cluster_types import ClusterTypesInitializer from .clusters import ClusterInitializer +from .config_templates import ConfigTemplateInitializer from .contact_groups import ContactGroupInitializer from .contact_roles import ContactRoleInitializer from .contacts import ContactInitializer diff --git a/src/netbox_initializers/initializers/config_templates.py b/src/netbox_initializers/initializers/config_templates.py new file mode 100644 index 0000000..992daf4 --- /dev/null +++ b/src/netbox_initializers/initializers/config_templates.py @@ -0,0 +1,35 @@ +from django.contrib.contenttypes.models import ContentType +from extras.models import ConfigTemplate + +from . import BaseInitializer, register_initializer + +MATCH_PARAMS = ["name", "description", "template_code", "environment_params"] + + +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 + + +class ConfigTemplateInitializer(BaseInitializer): + data_file_name = "config_templates.yml" + + def load_data(self): + config_templates = self.load_yaml() + if config_templates is None: + return + for template in config_templates: + matching_params, defaults = self.split_params(template) + config_template, created = ConfigTemplate.objects.get_or_create( + **matching_params, defaults=defaults + ) + + if created: + config_template.save() + print("🪝 Created Config Template {0}".format(config_template.name)) + + +register_initializer("config_templates", ConfigTemplateInitializer) diff --git a/src/netbox_initializers/initializers/devices.py b/src/netbox_initializers/initializers/devices.py index 14a6709..cde86d9 100644 --- a/src/netbox_initializers/initializers/devices.py +++ b/src/netbox_initializers/initializers/devices.py @@ -1,4 +1,5 @@ from dcim.models import Device, DeviceRole, DeviceType, Location, Platform, Rack, Site +from extras.models import ConfigTemplate from tenancy.models import Tenant from virtualization.models import Cluster @@ -11,11 +12,12 @@ "site": (Site, "name"), } OPTIONAL_ASSOCS = { - "tenant": (Tenant, "name"), - "platform": (Platform, "name"), - "rack": (Rack, "name"), "cluster": (Cluster, "name"), + "config_template": (ConfigTemplate, "name"), "location": (Location, "name"), + "platform": (Platform, "name"), + "rack": (Rack, "name"), + "tenant": (Tenant, "name"), } diff --git a/src/netbox_initializers/initializers/yaml/config_templates.yml b/src/netbox_initializers/initializers/yaml/config_templates.yml new file mode 100644 index 0000000..6d471d0 --- /dev/null +++ b/src/netbox_initializers/initializers/yaml/config_templates.yml @@ -0,0 +1,6 @@ +# - name: configtemplate1 +# description: a foobar template +# template_code: | +# hi {{ foo }} +# environment_params: | +# {"foo": "bar"} diff --git a/src/netbox_initializers/initializers/yaml/devices.yml b/src/netbox_initializers/initializers/yaml/devices.yml index e465ba2..953ad36 100644 --- a/src/netbox_initializers/initializers/yaml/devices.yml +++ b/src/netbox_initializers/initializers/yaml/devices.yml @@ -51,5 +51,7 @@ # location: cage 101 # face: front # position: 3 +# config_template: configtemplate1 # custom_field_data: # text_field: Description +#