diff --git a/netbox/ipam/api/serializers.py b/netbox/ipam/api/serializers.py index f7cf20636..7069496ce 100644 --- a/netbox/ipam/api/serializers.py +++ b/netbox/ipam/api/serializers.py @@ -2,7 +2,7 @@ from rest_framework import serializers from dcim.api.serializers import SiteNestedSerializer, InterfaceNestedSerializer from extras.api.serializers import CustomFieldSerializer -from ipam.models import VRF, Role, RIR, Aggregate, Prefix, IPAddress, VLAN, VLANGroup +from ipam.models import VRF, Role, RIR, Aggregate, Prefix, IPAddress, VLAN, VLANGroup, ServicePort from tenancy.api.serializers import TenantNestedSerializer @@ -170,3 +170,29 @@ class IPAddressNestedSerializer(IPAddressSerializer): IPAddressSerializer._declared_fields['nat_inside'] = IPAddressNestedSerializer() IPAddressSerializer._declared_fields['nat_outside'] = IPAddressNestedSerializer() + + +# +# Service Ports +# + +class ServicePortSerializer(serializers.ModelSerializer): + ip_address = IPAddressNestedSerializer() + + class Meta: + model = ServicePort + fields = ['id', 'ip_address', 'port', 'type', 'name', 'description'] + + +class ServicePortNestedSerializer(ServicePortSerializer): + ip_address = IPAddressNestedSerializer() + + class Meta(ServicePortSerializer.Meta): + fields = ['id', 'ip_address', 'port', 'type'] + + +class ServicePortDetailSerializer(ServicePortSerializer): + ip_address = IPAddressNestedSerializer() + + class Meta(ServicePortSerializer.Meta): + fields = ['id', 'ip_address', 'port', 'type', 'name', 'description'] \ No newline at end of file diff --git a/netbox/ipam/api/urls.py b/netbox/ipam/api/urls.py index 0c0ac9495..f2a2db21f 100644 --- a/netbox/ipam/api/urls.py +++ b/netbox/ipam/api/urls.py @@ -29,6 +29,10 @@ urlpatterns = [ url(r'^ip-addresses/$', IPAddressListView.as_view(), name='ipaddress_list'), url(r'^ip-addresses/(?P\d+)/$', IPAddressDetailView.as_view(), name='ipaddress_detail'), + # Service ports + url(r'^service-ports/$', ServicePortListView.as_view(), name='serviceport_list'), + url(r'^service-ports/(?P\d+)/$', ServicePortDetailView.as_view(), name='serviceport_detail'), + # VLAN groups url(r'^vlan-groups/$', VLANGroupListView.as_view(), name='vlangroup_list'), url(r'^vlan-groups/(?P\d+)/$', VLANGroupDetailView.as_view(), name='vlangroup_detail'), diff --git a/netbox/ipam/api/views.py b/netbox/ipam/api/views.py index 21ab9335c..917448db1 100644 --- a/netbox/ipam/api/views.py +++ b/netbox/ipam/api/views.py @@ -1,6 +1,6 @@ from rest_framework import generics -from ipam.models import VRF, Role, RIR, Aggregate, Prefix, IPAddress, VLAN, VLANGroup +from ipam.models import VRF, Role, RIR, Aggregate, Prefix, IPAddress, VLAN, VLANGroup, ServicePort from ipam import filters from extras.api.views import CustomFieldModelAPIView @@ -135,6 +135,26 @@ class IPAddressDetailView(CustomFieldModelAPIView, generics.RetrieveAPIView): serializer_class = serializers.IPAddressSerializer +# +# IP addresses +# + +class ServicePortListView(generics.ListAPIView): + """ + List IP addresses (filterable) + """ + queryset = ServicePort.objects.select_related('ip_address', 'port', 'type', 'name', 'description') + serializer_class = serializers.ServicePortSerializer + + +class ServicePortDetailView(generics.RetrieveAPIView): + """ + Retrieve a single IP address + """ + queryset = ServicePort.objects.select_related('ip_address', 'port', 'type', 'name', 'description') + serializer_class = serializers.ServicePortSerializer + + # # VLAN groups #