1
0
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:
Jeremy Stretch
2016-03-01 11:23:03 -05:00
commit 27b289ee3b
281 changed files with 26061 additions and 0 deletions

View File

View 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
View 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
View 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