mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Initial push to public repo
This commit is contained in:
0
netbox/ipam/api/__init__.py
Normal file
0
netbox/ipam/api/__init__.py
Normal file
158
netbox/ipam/api/serializers.py
Normal file
158
netbox/ipam/api/serializers.py
Normal file
@@ -0,0 +1,158 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
from dcim.api.serializers import SiteNestedSerializer, InterfaceNestedSerializer
|
||||
from ipam.models import VRF, Status, Role, RIR, Aggregate, Prefix, IPAddress, VLAN
|
||||
|
||||
|
||||
#
|
||||
# VRFs
|
||||
#
|
||||
|
||||
class VRFSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = VRF
|
||||
fields = ['id', 'name', 'rd', 'description']
|
||||
|
||||
|
||||
class VRFNestedSerializer(VRFSerializer):
|
||||
|
||||
class Meta(VRFSerializer.Meta):
|
||||
fields = ['id', 'name', 'rd']
|
||||
|
||||
|
||||
#
|
||||
# Statuses
|
||||
#
|
||||
|
||||
class StatusSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Status
|
||||
fields = ['id', 'name', 'slug', 'weight', 'bootstrap_class']
|
||||
|
||||
|
||||
class StatusNestedSerializer(StatusSerializer):
|
||||
|
||||
class Meta(StatusSerializer.Meta):
|
||||
fields = ['id', 'name', 'slug']
|
||||
|
||||
|
||||
#
|
||||
# Roles
|
||||
#
|
||||
|
||||
class RoleSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Role
|
||||
fields = ['id', 'name', 'slug', 'weight']
|
||||
|
||||
|
||||
class RoleNestedSerializer(RoleSerializer):
|
||||
|
||||
class Meta(RoleSerializer.Meta):
|
||||
fields = ['id', 'name', 'slug']
|
||||
|
||||
|
||||
#
|
||||
# RIRs
|
||||
#
|
||||
|
||||
class RIRSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = RIR
|
||||
fields = ['id', 'name', 'slug']
|
||||
|
||||
|
||||
class RIRNestedSerializer(RIRSerializer):
|
||||
|
||||
class Meta(RIRSerializer.Meta):
|
||||
pass
|
||||
|
||||
|
||||
#
|
||||
# Aggregates
|
||||
#
|
||||
|
||||
class AggregateSerializer(serializers.ModelSerializer):
|
||||
rir = RIRNestedSerializer()
|
||||
|
||||
class Meta:
|
||||
model = Aggregate
|
||||
fields = ['id', 'family', 'prefix', 'rir', 'date_added', 'description']
|
||||
|
||||
|
||||
class AggregateNestedSerializer(AggregateSerializer):
|
||||
|
||||
class Meta(AggregateSerializer.Meta):
|
||||
fields = ['id', 'family', 'prefix']
|
||||
|
||||
|
||||
#
|
||||
# VLANs
|
||||
#
|
||||
|
||||
class VLANSerializer(serializers.ModelSerializer):
|
||||
display_name = serializers.SerializerMethodField()
|
||||
site = SiteNestedSerializer()
|
||||
status = StatusNestedSerializer()
|
||||
role = RoleNestedSerializer()
|
||||
|
||||
class Meta:
|
||||
model = VLAN
|
||||
fields = ['id', 'site', 'vid', 'name', 'status', 'role', 'display_name']
|
||||
|
||||
def get_display_name(self, obj):
|
||||
return "{} ({})".format(obj.vid, obj.name)
|
||||
|
||||
|
||||
class VLANNestedSerializer(VLANSerializer):
|
||||
|
||||
class Meta(VLANSerializer.Meta):
|
||||
fields = ['id', 'vid', 'name', 'display_name']
|
||||
|
||||
|
||||
#
|
||||
# Prefixes
|
||||
#
|
||||
|
||||
class PrefixSerializer(serializers.ModelSerializer):
|
||||
site = SiteNestedSerializer()
|
||||
vrf = VRFNestedSerializer()
|
||||
vlan = VLANNestedSerializer()
|
||||
status = StatusNestedSerializer()
|
||||
role = RoleNestedSerializer()
|
||||
|
||||
class Meta:
|
||||
model = Prefix
|
||||
fields = ['id', 'family', 'prefix', 'site', 'vrf', 'vlan', 'status', 'role', 'description']
|
||||
|
||||
|
||||
class PrefixNestedSerializer(PrefixSerializer):
|
||||
|
||||
class Meta(PrefixSerializer.Meta):
|
||||
fields = ['id', 'family', 'prefix']
|
||||
|
||||
|
||||
#
|
||||
# IP addresses
|
||||
#
|
||||
|
||||
class IPAddressSerializer(serializers.ModelSerializer):
|
||||
vrf = VRFNestedSerializer()
|
||||
interface = InterfaceNestedSerializer()
|
||||
|
||||
class Meta:
|
||||
model = IPAddress
|
||||
fields = ['id', 'family', 'address', 'vrf', 'interface', 'description', 'nat_inside', 'nat_outside']
|
||||
|
||||
|
||||
class IPAddressNestedSerializer(IPAddressSerializer):
|
||||
|
||||
class Meta(IPAddressSerializer.Meta):
|
||||
fields = ['id', 'family', 'address']
|
||||
|
||||
IPAddressSerializer._declared_fields['nat_inside'] = IPAddressNestedSerializer()
|
||||
IPAddressSerializer._declared_fields['nat_outside'] = IPAddressNestedSerializer()
|
||||
40
netbox/ipam/api/urls.py
Normal file
40
netbox/ipam/api/urls.py
Normal file
@@ -0,0 +1,40 @@
|
||||
from django.conf.urls import url
|
||||
|
||||
from .views import *
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
|
||||
# VRFs
|
||||
url(r'^vrfs/$', VRFListView.as_view(), name='vrf_list'),
|
||||
url(r'^vrfs/(?P<pk>\d+)/$', VRFDetailView.as_view(), name='vrf_detail'),
|
||||
|
||||
# Statuses
|
||||
url(r'^statuses/$', StatusListView.as_view(), name='status_list'),
|
||||
url(r'^statuses/(?P<pk>\d+)/$', StatusDetailView.as_view(), name='status_detail'),
|
||||
|
||||
# Roles
|
||||
url(r'^roles/$', RoleListView.as_view(), name='role_list'),
|
||||
url(r'^roles/(?P<pk>\d+)/$', RoleDetailView.as_view(), name='role_detail'),
|
||||
|
||||
# RIRs
|
||||
url(r'^rirs/$', RIRListView.as_view(), name='rir_list'),
|
||||
url(r'^rirs/(?P<pk>\d+)/$', RIRDetailView.as_view(), name='rir_detail'),
|
||||
|
||||
# Aggregates
|
||||
url(r'^aggregates/$', AggregateListView.as_view(), name='aggregate_list'),
|
||||
url(r'^aggregates/(?P<pk>\d+)/$', AggregateDetailView.as_view(), name='aggregate_detail'),
|
||||
|
||||
# Prefixes
|
||||
url(r'^prefixes/$', PrefixListView.as_view(), name='prefix_list'),
|
||||
url(r'^prefixes/(?P<pk>\d+)/$', PrefixDetailView.as_view(), name='prefix_detail'),
|
||||
|
||||
# IP addresses
|
||||
url(r'^ip-addresses/$', IPAddressListView.as_view(), name='ipaddress_list'),
|
||||
url(r'^ip-addresses/(?P<pk>\d+)/$', IPAddressDetailView.as_view(), name='ipaddress_detail'),
|
||||
|
||||
# VLANs
|
||||
url(r'^vlans/$', VLANListView.as_view(), name='vlan_list'),
|
||||
url(r'^vlans/(?P<pk>\d+)/$', VLANDetailView.as_view(), name='vlan_detail'),
|
||||
|
||||
]
|
||||
140
netbox/ipam/api/views.py
Normal file
140
netbox/ipam/api/views.py
Normal file
@@ -0,0 +1,140 @@
|
||||
from rest_framework import generics
|
||||
|
||||
from ipam.models import VRF, Status, Role, RIR, Aggregate, Prefix, IPAddress, VLAN
|
||||
from ipam.filters import AggregateFilter, PrefixFilter, IPAddressFilter, VLANFilter
|
||||
from .serializers import VRFSerializer, StatusSerializer, RoleSerializer, RIRSerializer, AggregateSerializer, \
|
||||
PrefixSerializer, IPAddressSerializer, VLANSerializer
|
||||
|
||||
|
||||
class VRFListView(generics.ListAPIView):
|
||||
"""
|
||||
List all VRFs
|
||||
"""
|
||||
queryset = VRF.objects.all()
|
||||
serializer_class = VRFSerializer
|
||||
|
||||
|
||||
class VRFDetailView(generics.RetrieveAPIView):
|
||||
"""
|
||||
Retrieve a single VRF
|
||||
"""
|
||||
queryset = VRF.objects.all()
|
||||
serializer_class = VRFSerializer
|
||||
|
||||
|
||||
class StatusListView(generics.ListAPIView):
|
||||
"""
|
||||
List all statuses
|
||||
"""
|
||||
queryset = Status.objects.all()
|
||||
serializer_class = StatusSerializer
|
||||
|
||||
|
||||
class StatusDetailView(generics.RetrieveAPIView):
|
||||
"""
|
||||
Retrieve a single status
|
||||
"""
|
||||
queryset = Status.objects.all()
|
||||
serializer_class = StatusSerializer
|
||||
|
||||
|
||||
class RoleListView(generics.ListAPIView):
|
||||
"""
|
||||
List all roles
|
||||
"""
|
||||
queryset = Role.objects.all()
|
||||
serializer_class = RoleSerializer
|
||||
|
||||
|
||||
class RoleDetailView(generics.RetrieveAPIView):
|
||||
"""
|
||||
Retrieve a single role
|
||||
"""
|
||||
queryset = Role.objects.all()
|
||||
serializer_class = RoleSerializer
|
||||
|
||||
|
||||
class RIRListView(generics.ListAPIView):
|
||||
"""
|
||||
List all RIRs
|
||||
"""
|
||||
queryset = RIR.objects.all()
|
||||
serializer_class = RIRSerializer
|
||||
|
||||
|
||||
class RIRDetailView(generics.RetrieveAPIView):
|
||||
"""
|
||||
Retrieve a single RIR
|
||||
"""
|
||||
queryset = RIR.objects.all()
|
||||
serializer_class = RIRSerializer
|
||||
|
||||
|
||||
class AggregateListView(generics.ListAPIView):
|
||||
"""
|
||||
List aggregates (filterable)
|
||||
"""
|
||||
queryset = Aggregate.objects.select_related('rir')
|
||||
serializer_class = AggregateSerializer
|
||||
filter_class = AggregateFilter
|
||||
|
||||
|
||||
class AggregateDetailView(generics.RetrieveAPIView):
|
||||
"""
|
||||
Retrieve a single aggregate
|
||||
"""
|
||||
queryset = Aggregate.objects.select_related('rir')
|
||||
serializer_class = AggregateSerializer
|
||||
|
||||
|
||||
class PrefixListView(generics.ListAPIView):
|
||||
"""
|
||||
List prefixes (filterable)
|
||||
"""
|
||||
queryset = Prefix.objects.select_related('site', 'vrf', 'vlan', 'status', 'role')
|
||||
serializer_class = PrefixSerializer
|
||||
filter_class = PrefixFilter
|
||||
|
||||
|
||||
class PrefixDetailView(generics.RetrieveAPIView):
|
||||
"""
|
||||
Retrieve a single prefix
|
||||
"""
|
||||
queryset = Prefix.objects.select_related('site', 'vrf', 'vlan', 'status', 'role')
|
||||
serializer_class = PrefixSerializer
|
||||
|
||||
|
||||
class IPAddressListView(generics.ListAPIView):
|
||||
"""
|
||||
List IP addresses (filterable)
|
||||
"""
|
||||
queryset = IPAddress.objects.select_related('vrf', 'interface__device', 'nat_inside')\
|
||||
.prefetch_related('nat_outside')
|
||||
serializer_class = IPAddressSerializer
|
||||
filter_class = IPAddressFilter
|
||||
|
||||
|
||||
class IPAddressDetailView(generics.RetrieveAPIView):
|
||||
"""
|
||||
Retrieve a single IP address
|
||||
"""
|
||||
queryset = IPAddress.objects.select_related('vrf', 'interface__device', 'nat_inside')\
|
||||
.prefetch_related('nat_outside')
|
||||
serializer_class = IPAddressSerializer
|
||||
|
||||
|
||||
class VLANListView(generics.ListAPIView):
|
||||
"""
|
||||
List VLANs (filterable)
|
||||
"""
|
||||
queryset = VLAN.objects.select_related('site', 'status', 'role')
|
||||
serializer_class = VLANSerializer
|
||||
filter_class = VLANFilter
|
||||
|
||||
|
||||
class VLANDetailView(generics.RetrieveAPIView):
|
||||
"""
|
||||
Retrieve a single VLAN
|
||||
"""
|
||||
queryset = VLAN.objects.select_related('site', 'status', 'role')
|
||||
serializer_class = VLANSerializer
|
||||
Reference in New Issue
Block a user