Skip to content

Commit 1c406ad

Browse files
committed
skip onboarding
1 parent d00c5ac commit 1c406ad

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

netbox_onboarding/choices.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@ class OnboardingStatusChoices(ChoiceSet):
2222
STATUS_PENDING = "pending"
2323
STATUS_RUNNING = "running"
2424
STATUS_SUCCEEDED = "succeeded"
25+
STATUS_SKIPPED = "skipped"
2526

2627
CHOICES = (
2728
(STATUS_FAILED, "failed"),
2829
(STATUS_PENDING, "pending"),
2930
(STATUS_RUNNING, "running"),
3031
(STATUS_SUCCEEDED, "succeeded"),
32+
(STATUS_SKIPPED, "skipped"),
3133
)
3234

3335

netbox_onboarding/models.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
from django.db.models.signals import post_save
1515
from django.dispatch import receiver
1616
from django.db import models
17-
from dcim.models import Device
1817
from django.urls import reverse
18+
from dcim.models import Device
1919
from .choices import OnboardingStatusChoices, OnboardingFailChoices
2020
from .release import NETBOX_RELEASE_CURRENT, NETBOX_RELEASE_29
2121

@@ -113,3 +113,12 @@ def last_ot(self):
113113
except ValueError:
114114
return None
115115

116+
117+
@receiver(post_save, sender=Device)
118+
def init_onboarding_for_new_device(sender, instance, created, **kwargs): # pylint: disable=unused-argument
119+
"""Register to create a OnboardingDevice object for each new Device Object using Django Signal.
120+
121+
https://docs.djangoproject.com/en/3.0/ref/signals/#post-save
122+
"""
123+
if created:
124+
OnboardingDevice.objects.create(device=instance)

netbox_onboarding/worker.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from .choices import OnboardingFailChoices
2222
from .choices import OnboardingStatusChoices
2323
from .exceptions import OnboardException
24+
from .models import OnboardingDevice
2425
from .models import OnboardingTask
2526
from .onboard import OnboardingManager
2627

@@ -29,7 +30,7 @@
2930

3031

3132
@job("default")
32-
def onboard_device(task_id, credentials): # pylint: disable=R0915
33+
def onboard_device(task_id, credentials): # pylint: disable=too-many-statements
3334
"""Process a single OnboardingTask instance."""
3435
username = credentials.username
3536
password = credentials.password
@@ -44,6 +45,12 @@ def onboard_device(task_id, credentials): # pylint: disable=R0915
4445
try:
4546
if ot.ip_address:
4647
onboarded_device = Device.objects.get(primary_ip4__address__net_host=ot.ip_address)
48+
49+
if OnboardingDevice.objects.filter(device=onboarded_device, enabled=False):
50+
ot.status = OnboardingStatusChoices.STATUS_SKIPPED
51+
52+
return dict(ok=True)
53+
4754
except Device.DoesNotExist as exc:
4855
logger.info("Getting device with IP lookup failed: %s", str(exc))
4956
except Device.MultipleObjectsReturned as exc:
@@ -80,7 +87,7 @@ def onboard_device(task_id, credentials): # pylint: disable=R0915
8087
ot.save()
8188
onboarding_status = False
8289

83-
except Exception as exc: # pylint: disable=W0703
90+
except Exception as exc: # pylint: disable=broad-except
8491
if onboarded_device:
8592
ot.created_device = onboarded_device
8693

0 commit comments

Comments
 (0)