1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00
Files
netbox-community-netbox/netbox/ipam/api/serializers.py
2017-01-30 15:35:01 -05:00

200 lines
4.8 KiB
Python

from rest_framework import serializers
from dcim.api.serializers import NestedDeviceSerializer, DeviceInterfaceSerializer, NestedSiteSerializer
from extras.api.serializers import CustomFieldSerializer
from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
from tenancy.api.serializers import NestedTenantSerializer
from utilities.api import WritableSerializerMixin
#
# VRFs
#
class VRFSerializer(CustomFieldSerializer, serializers.ModelSerializer):
tenant = NestedTenantSerializer()
class Meta:
model = VRF
fields = ['id', 'name', 'rd', 'tenant', 'enforce_unique', 'description', 'custom_fields']
class NestedVRFSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = VRF
fields = ['id', 'url', 'name', 'rd']
#
# Roles
#
class RoleSerializer(serializers.ModelSerializer):
class Meta:
model = Role
fields = ['id', 'name', 'slug', 'weight']
class NestedRoleSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Role
fields = ['id', 'url', 'name', 'slug']
#
# RIRs
#
class RIRSerializer(serializers.ModelSerializer):
class Meta:
model = RIR
fields = ['id', 'name', 'slug', 'is_private']
class NestedRIRSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = RIR
fields = ['id', 'url', 'name', 'slug']
#
# Aggregates
#
class AggregateSerializer(CustomFieldSerializer, serializers.ModelSerializer):
rir = NestedRIRSerializer()
class Meta:
model = Aggregate
fields = ['id', 'family', 'prefix', 'rir', 'date_added', 'description', 'custom_fields']
class NestedAggregateSerializer(serializers.HyperlinkedModelSerializer):
class Meta(AggregateSerializer.Meta):
model = Aggregate
fields = ['id', 'url', 'family', 'prefix']
#
# VLAN groups
#
class VLANGroupSerializer(WritableSerializerMixin, serializers.ModelSerializer):
site = NestedSiteSerializer()
class Meta:
model = VLANGroup
fields = ['id', 'name', 'slug', 'site']
class NestedVLANGroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = VLANGroup
fields = ['id', 'url', 'name', 'slug']
#
# VLANs
#
class VLANSerializer(CustomFieldSerializer, serializers.ModelSerializer):
site = NestedSiteSerializer()
group = NestedVLANGroupSerializer()
tenant = NestedTenantSerializer()
role = NestedRoleSerializer()
class Meta:
model = VLAN
fields = [
'id', 'site', 'group', 'vid', 'name', 'tenant', 'status', 'role', 'description', 'display_name',
'custom_fields',
]
class NestedVLANSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = VLAN
fields = ['id', 'url', 'vid', 'name', 'display_name']
#
# Prefixes
#
class PrefixSerializer(CustomFieldSerializer, serializers.ModelSerializer):
site = NestedSiteSerializer()
vrf = NestedVRFSerializer()
tenant = NestedTenantSerializer()
vlan = NestedVLANSerializer()
role = NestedRoleSerializer()
class Meta:
model = Prefix
fields = [
'id', 'family', 'prefix', 'site', 'vrf', 'tenant', 'vlan', 'status', 'role', 'is_pool', 'description',
'custom_fields',
]
class NestedPrefixSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Prefix
fields = ['id', 'url', 'family', 'prefix']
#
# IP addresses
#
class IPAddressSerializer(CustomFieldSerializer, serializers.ModelSerializer):
vrf = NestedVRFSerializer()
tenant = NestedTenantSerializer()
interface = DeviceInterfaceSerializer()
class Meta:
model = IPAddress
fields = [
'id', 'family', 'address', 'vrf', 'tenant', 'status', 'interface', 'description', 'nat_inside',
'nat_outside', 'custom_fields',
]
class NestedIPAddressSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = IPAddress
fields = ['id', 'url', 'family', 'address']
IPAddressSerializer._declared_fields['nat_inside'] = NestedIPAddressSerializer()
IPAddressSerializer._declared_fields['nat_outside'] = NestedIPAddressSerializer()
#
# Services
#
class ServiceSerializer(serializers.ModelSerializer):
device = NestedDeviceSerializer()
ipaddresses = NestedIPAddressSerializer(many=True)
class Meta:
model = Service
fields = ['id', 'device', 'name', 'port', 'protocol', 'ipaddresses', 'description']
class ChildServiceSerializer(serializers.HyperlinkedModelSerializer):
ipaddresses = NestedIPAddressSerializer(many=True)
class Meta:
model = Service
fields = ['id', 'url', 'name', 'port', 'protocol', 'ipaddresses', 'description']