Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions netbox_onboarding/onboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from napalm.base.exceptions import ConnectionException, CommandErrorException

from django.conf import settings
from django.utils.text import slugify

from netmiko.ssh_autodetect import SSHDetect
from netmiko.ssh_exception import NetMikoAuthenticationException
Expand Down Expand Up @@ -336,14 +337,14 @@ def ensure_device_type(
# instance.

try:
self.manufacturer = Manufacturer.objects.get(slug=self.netdev.vendor.lower())
self.manufacturer = Manufacturer.objects.get(slug=slugify(self.netdev.vendor))
except Manufacturer.DoesNotExist:
if not create_manufacturer:
raise OnboardException(
reason="fail-config", message=f"ERROR manufacturer not found: {self.netdev.vendor}"
)

self.manufacturer = Manufacturer.objects.create(name=self.netdev.vendor, slug=self.netdev.vendor.lower())
self.manufacturer = Manufacturer.objects.create(name=self.netdev.vendor, slug=slugify(self.netdev.vendor))
self.manufacturer.save()

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

try:
self.device_type = DeviceType.objects.get(slug=self.netdev.model.lower())
self.device_type = DeviceType.objects.get(slug=slugify(self.netdev.model))
self.netdev.ot.device_type = self.device_type.slug
self.netdev.ot.save()
except DeviceType.DoesNotExist:
Expand All @@ -368,7 +369,7 @@ def ensure_device_type(

logging.info("CREATE: device-type: %s", self.netdev.model)
self.device_type = DeviceType.objects.create(
slug=self.netdev.model.lower(), model=self.netdev.model.upper(), manufacturer=self.manufacturer
slug=slugify(self.netdev.model), model=self.netdev.model.upper(), manufacturer=self.manufacturer
)
self.device_type.save()
self.netdev.ot.device_type = self.device_type.slug
Expand Down Expand Up @@ -400,14 +401,14 @@ def ensure_device_role(
return

try:
device_role = DeviceRole.objects.get(slug=default_device_role)
device_role = DeviceRole.objects.get(slug=slugify(default_device_role))
except DeviceRole.DoesNotExist:
if not create_device_role:
raise OnboardException(
reason="fail-config", message=f"ERROR device role not found: {default_device_role}"
)

device_role = DeviceRole.objects.create(name=default_device_role, slug=default_device_role)
device_role = DeviceRole.objects.create(name=default_device_role, slug=slugify(default_device_role))
device_role.save()

self.netdev.ot.role = device_role
Expand Down
16 changes: 10 additions & 6 deletions netbox_onboarding/tests/test_onboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
limitations under the License.
"""
from django.test import TestCase
from django.utils.text import slugify

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

self.ndk1 = NetdevKeeper(self.onboarding_task1)
self.ndk1.hostname = "device1"
self.ndk1.vendor = "cisco"
self.ndk1.model = "csr1000v"
self.ndk1.vendor = "Cisco"
self.ndk1.model = "CSR1000v"
self.ndk1.serial_number = "123456"
self.ndk1.mgmt_ifname = "GigaEthernet0"
self.ndk1.mgmt_pflen = 24
Expand All @@ -62,17 +63,19 @@ def test_ensure_device_type_missing(self):

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

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

nbk.ensure_device_type(create_manufacturer=True, create_device_type=True)
self.assertIsInstance(nbk.manufacturer, Manufacturer)
self.assertIsInstance(nbk.device_type, DeviceType)
self.assertEqual(nbk.manufacturer.slug, slugify(self.ndk1.vendor))
self.assertEqual(nbk.device_type.slug, slugify(self.ndk1.model))

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

nbk.ensure_device_role(create_device_role=True, default_device_role="mytestrole")
role = "My-Test-Role"
nbk.ensure_device_role(create_device_role=True, default_device_role=role)
self.assertIsInstance(nbk.netdev.ot.role, DeviceRole)
self.assertEqual(nbk.netdev.ot.role.slug, "mytestrole")
self.assertEqual(nbk.netdev.ot.role.slug, slugify(role))

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