Skip to content

Commit

Permalink
Merge pull request #55 from yanndegat/addconfigtemplates
Browse files Browse the repository at this point in the history
add support for config_templates
  • Loading branch information
tobiasge authored Jun 15, 2023
2 parents 11e5ace + 6e2b062 commit df5054c
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 3 deletions.
2 changes: 2 additions & 0 deletions src/netbox_initializers/initializers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
"custom_fields",
"custom_links",
"tags",
"config_templates",
"webhooks",
"tenant_groups",
"tenants",
Expand Down Expand Up @@ -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
Expand Down
35 changes: 35 additions & 0 deletions src/netbox_initializers/initializers/config_templates.py
Original file line number Diff line number Diff line change
@@ -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)
8 changes: 5 additions & 3 deletions src/netbox_initializers/initializers/devices.py
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -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"),
}


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# - name: configtemplate1
# description: a foobar template
# template_code: |
# hi {{ foo }}
# environment_params: |
# {"foo": "bar"}
2 changes: 2 additions & 0 deletions src/netbox_initializers/initializers/yaml/devices.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,5 +51,7 @@
# location: cage 101
# face: front
# position: 3
# config_template: configtemplate1
# custom_field_data:
# text_field: Description
#

0 comments on commit df5054c

Please sign in to comment.