Skip to content

Device Onboarding API Package

nautobot_device_onboarding.api

REST API module for nautobot_device_onboarding plugin.

serializers

Model serializers for the nautobot_device_onboarding REST API.

OnboardingTaskSerializer

Bases: serializers.ModelSerializer

Serializer for the OnboardingTask model.

Source code in nautobot_device_onboarding/api/serializers.py
class OnboardingTaskSerializer(serializers.ModelSerializer):
    """Serializer for the OnboardingTask model."""

    site = serializers.SlugRelatedField(
        many=False,
        read_only=False,
        queryset=Site.objects.all(),
        slug_field="slug",
        required=True,
        help_text="Nautobot site 'slug' value",
    )

    ip_address = serializers.CharField(
        required=True,
        help_text="IP Address to reach device",
    )

    username = serializers.CharField(
        required=False,
        write_only=True,
        help_text="Device username",
    )

    password = serializers.CharField(
        required=False,
        write_only=True,
        help_text="Device password",
    )

    secret = serializers.CharField(
        required=False,
        write_only=True,
        help_text="Device secret password",
    )

    port = serializers.IntegerField(required=False, help_text="Device PORT to check for online")

    timeout = serializers.IntegerField(required=False, help_text="Timeout (sec) for device connect")

    role = serializers.SlugRelatedField(
        many=False,
        read_only=False,
        queryset=DeviceRole.objects.all(),
        slug_field="slug",
        required=False,
        help_text="Nautobot device role 'slug' value",
    )

    device_type = serializers.CharField(
        required=False,
        help_text="Nautobot device type 'slug' value",
    )

    platform = serializers.SlugRelatedField(
        many=False,
        read_only=False,
        queryset=Platform.objects.all(),
        slug_field="slug",
        required=False,
        help_text="Nautobot Platform 'slug' value",
    )

    created_device = serializers.CharField(
        required=False,
        read_only=True,
        help_text="Created device name",
    )

    status = serializers.CharField(required=False, read_only=True, help_text="Onboarding Status")

    failed_reason = serializers.CharField(required=False, read_only=True, help_text="Failure reason")

    message = serializers.CharField(required=False, read_only=True, help_text="Status message")

    class Meta:  # noqa: D106 "Missing docstring in public nested class"
        model = OnboardingTask
        fields = [
            "id",
            "site",
            "ip_address",
            "username",
            "password",
            "secret",
            "port",
            "timeout",
            "role",
            "device_type",
            "platform",
            "created_device",
            "status",
            "failed_reason",
            "message",
        ]

    def create(self, validated_data):
        """Create an OnboardingTask and enqueue it for processing."""
        # Fields are string-type so default to empty (instead of None)
        username = validated_data.pop("username", "")
        password = validated_data.pop("password", "")
        secret = validated_data.pop("secret", "")

        credentials = Credentials(
            username=username,
            password=password,
            secret=secret,
        )

        onboarding_task = OnboardingTask.objects.create(**validated_data)

        enqueue_onboarding_task(onboarding_task.id, credentials)

        return onboarding_task
create(validated_data)

Create an OnboardingTask and enqueue it for processing.

Source code in nautobot_device_onboarding/api/serializers.py
def create(self, validated_data):
    """Create an OnboardingTask and enqueue it for processing."""
    # Fields are string-type so default to empty (instead of None)
    username = validated_data.pop("username", "")
    password = validated_data.pop("password", "")
    secret = validated_data.pop("secret", "")

    credentials = Credentials(
        username=username,
        password=password,
        secret=secret,
    )

    onboarding_task = OnboardingTask.objects.create(**validated_data)

    enqueue_onboarding_task(onboarding_task.id, credentials)

    return onboarding_task

urls

REST API URLs for device onboarding.

views

Django REST Framework API views for device onboarding.

OnboardingTaskView

Bases: mixins.CreateModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, mixins.DestroyModelMixin, viewsets.GenericViewSet

Create, check status of, and delete onboarding tasks.

In-place updates (PUT, PATCH) of tasks are not permitted.

Source code in nautobot_device_onboarding/api/views.py
class OnboardingTaskView(  # pylint: disable=too-many-ancestors
    mixins.CreateModelMixin,
    mixins.ListModelMixin,
    mixins.RetrieveModelMixin,
    mixins.DestroyModelMixin,
    viewsets.GenericViewSet,
):
    """Create, check status of, and delete onboarding tasks.

    In-place updates (PUT, PATCH) of tasks are not permitted.
    """

    queryset = OnboardingTask.objects.all()
    filterset_class = OnboardingTaskFilterSet
    serializer_class = OnboardingTaskSerializer