Skip to content

Commit 67dcd4c

Browse files
committed
add site_group support
1 parent 999b087 commit 67dcd4c

5 files changed

Lines changed: 52 additions & 2 deletions

File tree

src/netbox_initializers/initializers/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"webhooks",
1818
"tenant_groups",
1919
"tenants",
20+
"site_groups",
2021
"regions",
2122
"rirs",
2223
"asns",
@@ -205,6 +206,7 @@ def register_initializer(name: str, initializer):
205206
from .route_targets import RouteTargetInitializer
206207
from .service_templates import ServiceTemplateInitializer
207208
from .services import ServiceInitializer
209+
from .site_groups import SiteGroupInitializer
208210
from .sites import SiteInitializer
209211
from .tags import TagInitializer
210212
from .tenant_groups import TenantGroupInitializer
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from dcim.models import SiteGroup
2+
3+
from . import BaseInitializer, register_initializer
4+
5+
OPTIONAL_ASSOCS = {"parent": (SiteGroup, "name")}
6+
7+
8+
class SiteGroupInitializer(BaseInitializer):
9+
data_file_name = "site_groups.yml"
10+
11+
def load_data(self):
12+
site_groups = self.load_yaml()
13+
if site_groups is None:
14+
return
15+
for params in site_groups:
16+
tags = params.pop("tags", None)
17+
18+
for assoc, details in OPTIONAL_ASSOCS.items():
19+
if assoc in params:
20+
model, field = details
21+
query = {field: params.pop(assoc)}
22+
23+
params[assoc] = model.objects.get(**query)
24+
25+
matching_params, defaults = self.split_params(params)
26+
site_group, created = SiteGroup.objects.get_or_create(
27+
**matching_params, defaults=defaults
28+
)
29+
30+
if created:
31+
print("🌐 Created Site Group", site_group.name)
32+
33+
self.set_tags(site_group, tags)
34+
35+
36+
register_initializer("site_groups", SiteGroupInitializer)

src/netbox_initializers/initializers/sites.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1-
from dcim.models import Region, Site
1+
from dcim.models import Region, Site, SiteGroup
22
from ipam.models import ASN
33
from tenancy.models import Tenant
44

55
from . import BaseInitializer, register_initializer
66

7-
OPTIONAL_ASSOCS = {"region": (Region, "name"), "tenant": (Tenant, "name")}
7+
OPTIONAL_ASSOCS = {
8+
"region": (Region, "name"),
9+
"group": (SiteGroup, "name"),
10+
"tenant": (Tenant, "name"),
11+
}
812

913

1014
class SiteInitializer(BaseInitializer):
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# - name: Datacenter
2+
# slug: datacenter
3+
# - name: Office
4+
# slug: office
5+
# - name: Headquaters
6+
# slug: headquarters
7+
# parent: Office

src/netbox_initializers/initializers/yaml/sites.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
# region: Downtown
44
# status: active
55
# facility: Amsterdam 1
6+
#. group: Office
67
# custom_field_data:
78
# text_field: Description for AMS1
89
# - name: AMS 2

0 commit comments

Comments
 (0)