Skip to content

Commit ddccf8c

Browse files
authored
Merge pull request #37 from whitej6/fix-slugify
Fixes #36
2 parents b00dabc + 1164ea1 commit ddccf8c

File tree

2 files changed

+17
-12
lines changed

2 files changed

+17
-12
lines changed

netbox_onboarding/onboard.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from napalm.base.exceptions import ConnectionException, CommandErrorException
2121

2222
from django.conf import settings
23+
from django.utils.text import slugify
2324

2425
from netmiko.ssh_autodetect import SSHDetect
2526
from netmiko.ssh_exception import NetMikoAuthenticationException
@@ -336,14 +337,14 @@ def ensure_device_type(
336337
# instance.
337338

338339
try:
339-
self.manufacturer = Manufacturer.objects.get(slug=self.netdev.vendor.lower())
340+
self.manufacturer = Manufacturer.objects.get(slug=slugify(self.netdev.vendor))
340341
except Manufacturer.DoesNotExist:
341342
if not create_manufacturer:
342343
raise OnboardException(
343344
reason="fail-config", message=f"ERROR manufacturer not found: {self.netdev.vendor}"
344345
)
345346

346-
self.manufacturer = Manufacturer.objects.create(name=self.netdev.vendor, slug=self.netdev.vendor.lower())
347+
self.manufacturer = Manufacturer.objects.create(name=self.netdev.vendor, slug=slugify(self.netdev.vendor))
347348
self.manufacturer.save()
348349

349350
# Now see if the device type (slug) already exists,
@@ -357,7 +358,7 @@ def ensure_device_type(
357358
logging.warning("device model is now: %s", self.netdev.model)
358359

359360
try:
360-
self.device_type = DeviceType.objects.get(slug=self.netdev.model.lower())
361+
self.device_type = DeviceType.objects.get(slug=slugify(self.netdev.model))
361362
self.netdev.ot.device_type = self.device_type.slug
362363
self.netdev.ot.save()
363364
except DeviceType.DoesNotExist:
@@ -368,7 +369,7 @@ def ensure_device_type(
368369

369370
logging.info("CREATE: device-type: %s", self.netdev.model)
370371
self.device_type = DeviceType.objects.create(
371-
slug=self.netdev.model.lower(), model=self.netdev.model.upper(), manufacturer=self.manufacturer
372+
slug=slugify(self.netdev.model), model=self.netdev.model.upper(), manufacturer=self.manufacturer
372373
)
373374
self.device_type.save()
374375
self.netdev.ot.device_type = self.device_type.slug
@@ -400,14 +401,14 @@ def ensure_device_role(
400401
return
401402

402403
try:
403-
device_role = DeviceRole.objects.get(slug=default_device_role)
404+
device_role = DeviceRole.objects.get(slug=slugify(default_device_role))
404405
except DeviceRole.DoesNotExist:
405406
if not create_device_role:
406407
raise OnboardException(
407408
reason="fail-config", message=f"ERROR device role not found: {default_device_role}"
408409
)
409410

410-
device_role = DeviceRole.objects.create(name=default_device_role, slug=default_device_role)
411+
device_role = DeviceRole.objects.create(name=default_device_role, slug=slugify(default_device_role))
411412
device_role.save()
412413

413414
self.netdev.ot.role = device_role

netbox_onboarding/tests/test_onboard.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
limitations under the License.
1313
"""
1414
from django.test import TestCase
15+
from django.utils.text import slugify
1516

1617
from dcim.models import Site, Device, Interface, Manufacturer, DeviceType, DeviceRole, Platform
1718
from ipam.models import IPAddress
@@ -42,8 +43,8 @@ def setUp(self):
4243

4344
self.ndk1 = NetdevKeeper(self.onboarding_task1)
4445
self.ndk1.hostname = "device1"
45-
self.ndk1.vendor = "cisco"
46-
self.ndk1.model = "csr1000v"
46+
self.ndk1.vendor = "Cisco"
47+
self.ndk1.model = "CSR1000v"
4748
self.ndk1.serial_number = "123456"
4849
self.ndk1.mgmt_ifname = "GigaEthernet0"
4950
self.ndk1.mgmt_pflen = 24
@@ -62,17 +63,19 @@ def test_ensure_device_type_missing(self):
6263

6364
with self.assertRaises(OnboardException) as exc_info:
6465
nbk.ensure_device_type(create_manufacturer=False, create_device_type=False)
65-
self.assertEqual(exc_info.exception.message, "ERROR manufacturer not found: cisco")
66+
self.assertEqual(exc_info.exception.message, "ERROR manufacturer not found: Cisco")
6667
self.assertEqual(exc_info.exception.reason, "fail-config")
6768

6869
with self.assertRaises(OnboardException) as exc_info:
6970
nbk.ensure_device_type(create_manufacturer=True, create_device_type=False)
70-
self.assertEqual(exc_info.exception.message, "ERROR device type not found: csr1000v")
71+
self.assertEqual(exc_info.exception.message, "ERROR device type not found: CSR1000v")
7172
self.assertEqual(exc_info.exception.reason, "fail-config")
7273

7374
nbk.ensure_device_type(create_manufacturer=True, create_device_type=True)
7475
self.assertIsInstance(nbk.manufacturer, Manufacturer)
7576
self.assertIsInstance(nbk.device_type, DeviceType)
77+
self.assertEqual(nbk.manufacturer.slug, slugify(self.ndk1.vendor))
78+
self.assertEqual(nbk.device_type.slug, slugify(self.ndk1.model))
7679

7780
def test_ensure_device_type_present(self):
7881
"""Verify ensure_device_type function when Manufacturer and DeviceType object are already present."""
@@ -91,9 +94,10 @@ def test_ensure_device_role_not_exist(self):
9194
self.assertEqual(exc_info.exception.message, "ERROR device role not found: mytestrole")
9295
self.assertEqual(exc_info.exception.reason, "fail-config")
9396

94-
nbk.ensure_device_role(create_device_role=True, default_device_role="mytestrole")
97+
role = "My-Test-Role"
98+
nbk.ensure_device_role(create_device_role=True, default_device_role=role)
9599
self.assertIsInstance(nbk.netdev.ot.role, DeviceRole)
96-
self.assertEqual(nbk.netdev.ot.role.slug, "mytestrole")
100+
self.assertEqual(nbk.netdev.ot.role.slug, slugify(role))
97101

98102
def test_ensure_device_role_exist(self):
99103
"""Verify ensure_device_role function when DeviceRole exist but is not assigned to the OT."""

0 commit comments

Comments
 (0)