IPAddressFunctionAssignments - api mvp

This commit is contained in:
Jamie Murphy 2023-07-06 23:53:47 +01:00
parent 603f021465
commit 4920539c52
4 changed files with 34 additions and 3 deletions

View File

@ -4,7 +4,7 @@ from rest_framework import serializers
from dcim.api.nested_serializers import NestedDeviceSerializer, NestedSiteSerializer
from ipam.choices import *
from ipam.constants import IPADDRESS_ASSIGNMENT_MODELS, VLANGROUP_SCOPE_TYPES
from ipam.constants import IPADDRESS_ASSIGNMENT_MODELS, VLANGROUP_SCOPE_TYPES, IPADDRESS_FUNCTION_ASSIGNMENT_MODELS
from ipam.models import *
from netbox.api.fields import ChoiceField, ContentTypeField, SerializedPKRelatedField
from netbox.api.serializers import NetBoxModelSerializer
@ -445,6 +445,29 @@ class AvailableIPSerializer(serializers.Serializer):
}
class IPAddressFunctionAssignmentsSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddressfunctionassignments-detail')
assigned_object_type = ContentTypeField(
queryset=ContentType.objects.filter(IPADDRESS_FUNCTION_ASSIGNMENT_MODELS),
)
assigned_object = serializers.SerializerMethodField(read_only=True)
assigned_ip = NestedIPAddressSerializer()
class Meta:
model = IPAddressFunctionAssignments
fields = [
'id', 'url', 'display', 'assigned_ip', 'function',
'assigned_object_type', 'assigned_object_id', 'assigned_object',
'tags', 'custom_fields', 'created', 'last_updated',
]
@extend_schema_field(serializers.JSONField(allow_null=True))
def get_assigned_object(self, instance):
serializer = get_serializer_for_model(instance.assigned_object, prefix=NESTED_SERIALIZER_PREFIX)
context = {'request': self.context['request']}
return serializer(instance.assigned_object, context=context).data
#
# Services
#

View File

@ -17,6 +17,7 @@ router.register('roles', views.RoleViewSet)
router.register('prefixes', views.PrefixViewSet)
router.register('ip-ranges', views.IPRangeViewSet)
router.register('ip-addresses', views.IPAddressViewSet)
router.register('ip-address-function-assignments', views.IPAddressFunctionAssignmentsViewSet)
router.register('fhrp-groups', views.FHRPGroupViewSet)
router.register('fhrp-group-assignments', views.FHRPGroupAssignmentViewSet)
router.register('vlan-groups', views.VLANGroupViewSet)

View File

@ -131,6 +131,12 @@ class IPAddressViewSet(NetBoxModelViewSet):
return super().destroy(request, *args, **kwargs)
class IPAddressFunctionAssignmentsViewSet(NetBoxModelViewSet):
queryset = IPAddressFunctionAssignments.objects.prefetch_related('assigned_ip', 'assigned_object', 'tags')
serializer_class = serializers.IPAddressFunctionAssignmentsSerializer
# filterset_class = filtersets. # TODO add filterset
class FHRPGroupViewSet(NetBoxModelViewSet):
queryset = FHRPGroup.objects.prefetch_related('ip_addresses', 'tags')
serializer_class = serializers.FHRPGroupSerializer

View File

@ -94,16 +94,17 @@ class IPAddressRoleChoices(ChoiceSet):
(ROLE_CARP, 'CARP', 'green'),
)
class IPAddressFunctionChoices(ChoiceSet):
FUNC_OOB = 'Out Of Band'
# Future planning, depreciate primary_ip
# FUNC_PRIMARY_IP = 'Primary IP'
# FUNC_PRIMARY_IP = 'Primary IP'
CHOICES = (
(FUNC_OOB, 'Out Of Band', 'gray'),
# Future planning, depreciate primary_ip
# (FUNC_PRIMARY_IP, 'Primary IP', 'blue'),
# (FUNC_PRIMARY_IP, 'Primary IP', 'blue'),
)