From 64de66e2d52cebed71558af50017bd0c37d19ed9 Mon Sep 17 00:00:00 2001 From: Marco Ceppi Date: Mon, 25 Nov 2019 11:27:24 -0500 Subject: [PATCH] Allow for creation of interfaces and tenants in startup / initializers --- docker/initializers/interfaces.yml | 1 + docker/initializers/tenants.yml | 11 ++++++++ docker/startup_scripts/001_tenants.py | 20 +++++++++++++ docker/startup_scripts/120_interfaces.py | 36 ++++++++++++++++++++++++ 4 files changed, 68 insertions(+) create mode 100644 docker/initializers/interfaces.yml create mode 100644 docker/initializers/tenants.yml create mode 100644 docker/startup_scripts/001_tenants.py create mode 100644 docker/startup_scripts/120_interfaces.py diff --git a/docker/initializers/interfaces.yml b/docker/initializers/interfaces.yml new file mode 100644 index 000000000..cb4b8ab63 --- /dev/null +++ b/docker/initializers/interfaces.yml @@ -0,0 +1 @@ +device_role: 'customer-network-locker' diff --git a/docker/initializers/tenants.yml b/docker/initializers/tenants.yml new file mode 100644 index 000000000..1ae1fcf47 --- /dev/null +++ b/docker/initializers/tenants.yml @@ -0,0 +1,11 @@ +- slug: e9622cff-0286-4e98-9662-01f91ab907ff + name: vaportest + +- slug: 5ec5a570-4b7e-4151-b9df-2d6f9379776c + name: VaporProvider + +- slug: c26a3f7c-a854-4d4f-93cc-4fb4d6e34c08 + name: Test Org1 + +- slug: 3cd715b1-42a5-4c6f-ba4d-2fb20f6f06c4 + name: Test Org2 diff --git a/docker/startup_scripts/001_tenants.py b/docker/startup_scripts/001_tenants.py new file mode 100644 index 000000000..f1ef7c8c2 --- /dev/null +++ b/docker/startup_scripts/001_tenants.py @@ -0,0 +1,20 @@ +from tenancy.models import Tenant +from ruamel.yaml import YAML +from pathlib import Path +import sys + +file = Path('/opt/netbox/initializers/tenants.yml') +if not file.is_file(): + sys.exit() + +with file.open('r') as stream: + yaml = YAML(typ='safe') + tenants = yaml.load(stream) + + if tenants is not None: + for params in tenants: + + tenant, created = Tenant.objects.get_or_create(**params) + + if created: + print("🏠 Created tenant", tenant.name) diff --git a/docker/startup_scripts/120_interfaces.py b/docker/startup_scripts/120_interfaces.py new file mode 100644 index 000000000..1d080d54a --- /dev/null +++ b/docker/startup_scripts/120_interfaces.py @@ -0,0 +1,36 @@ +from dcim.models import Interface, Device, DeviceRole +from dcim.constants import IFACE_TYPE_KEYSTONE + +from ruamel.yaml import YAML +from pathlib import Path + +import sys + + +file = Path('/opt/netbox/initializers/interfaces.yml') +if not file.is_file(): + sys.exit() + +with file.open('r') as stream: + yaml = YAML(typ='safe') + config = yaml.load(stream) + + device_role = DeviceRole.objects.get(slug=config.get('device_role')) + + if not device_role: + sys.exit() + + network_lockers = Device.objects.all().filter(device_role=device_role.id) + + for locker in network_lockers: + i = 1 + while i < 24: + strand0 = i + strand1 = i + 1 + name = '{}-{}'.format(strand0, strand1) + + i += 2 + + interface, created = Interface.objects.get_or_create(name=name, device=locker, type=IFACE_TYPE_KEYSTONE) + if created: + print("🔗 Created interface {} for {}".format(interface.name, locler.name))