1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

260 lines
6.7 KiB
Python
Raw Normal View History

2016-03-01 11:23:03 -05:00
from rest_framework import serializers
from dcim.api.serializers import NestedDeviceSerializer, InterfaceSerializer, NestedSiteSerializer
from extras.api.customfields import CustomFieldModelSerializer
from ipam.models import (
Aggregate, IPAddress, IPADDRESS_STATUS_CHOICES, IP_PROTOCOL_CHOICES, Prefix, PREFIX_STATUS_CHOICES, RIR, Role,
Service, VLAN, VLAN_STATUS_CHOICES, VLANGroup, VRF,
)
from tenancy.api.serializers import NestedTenantSerializer
from utilities.api import ChoiceFieldSerializer
2016-03-01 11:23:03 -05:00
#
# VRFs
#
class VRFSerializer(CustomFieldModelSerializer):
tenant = NestedTenantSerializer()
2016-03-01 11:23:03 -05:00
class Meta:
model = VRF
fields = ['id', 'name', 'rd', 'tenant', 'enforce_unique', 'description', 'custom_fields']
2016-03-01 11:23:03 -05:00
class NestedVRFSerializer(serializers.ModelSerializer):
2017-01-31 10:40:53 -05:00
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vrf-detail')
2016-03-01 11:23:03 -05:00
class Meta:
model = VRF
fields = ['id', 'url', 'name', 'rd']
class WritableVRFSerializer(serializers.ModelSerializer):
class Meta:
model = VRF
fields = ['id', 'name', 'rd', 'tenant', 'enforce_unique', 'description']
2016-03-01 11:23:03 -05:00
#
# Roles
#
class RoleSerializer(serializers.ModelSerializer):
class Meta:
model = Role
fields = ['id', 'name', 'slug', 'weight']
class NestedRoleSerializer(serializers.ModelSerializer):
2017-01-31 10:40:53 -05:00
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:role-detail')
2016-03-01 11:23:03 -05:00
class Meta:
model = Role
fields = ['id', 'url', 'name', 'slug']
2016-03-01 11:23:03 -05:00
#
# RIRs
#
class RIRSerializer(serializers.ModelSerializer):
class Meta:
model = RIR
fields = ['id', 'name', 'slug', 'is_private']
2016-03-01 11:23:03 -05:00
class NestedRIRSerializer(serializers.ModelSerializer):
2017-01-31 10:40:53 -05:00
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:rir-detail')
2016-03-01 11:23:03 -05:00
class Meta:
model = RIR
fields = ['id', 'url', 'name', 'slug']
2016-03-01 11:23:03 -05:00
#
# Aggregates
#
class AggregateSerializer(CustomFieldModelSerializer):
rir = NestedRIRSerializer()
2016-03-01 11:23:03 -05:00
class Meta:
model = Aggregate
fields = ['id', 'family', 'prefix', 'rir', 'date_added', 'description', 'custom_fields']
2016-03-01 11:23:03 -05:00
class NestedAggregateSerializer(serializers.ModelSerializer):
2017-01-31 10:40:53 -05:00
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:aggregate-detail')
2016-03-01 11:23:03 -05:00
class Meta(AggregateSerializer.Meta):
model = Aggregate
fields = ['id', 'url', 'family', 'prefix']
2016-03-01 11:23:03 -05:00
class WritableAggregateSerializer(serializers.ModelSerializer):
class Meta:
model = Aggregate
fields = ['id', 'family', 'prefix', 'rir', 'date_added', 'description']
2016-07-15 13:26:54 -04:00
#
# VLAN groups
#
class VLANGroupSerializer(serializers.ModelSerializer):
site = NestedSiteSerializer()
2016-07-15 13:26:54 -04:00
class Meta:
model = VLANGroup
fields = ['id', 'name', 'slug', 'site']
class NestedVLANGroupSerializer(serializers.ModelSerializer):
2017-01-31 10:40:53 -05:00
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlangroup-detail')
2016-07-15 13:26:54 -04:00
class Meta:
model = VLANGroup
fields = ['id', 'url', 'name', 'slug']
2016-07-15 13:26:54 -04:00
class WritableVLANGroupSerializer(serializers.ModelSerializer):
class Meta:
model = VLANGroup
fields = ['id', 'name', 'slug', 'site']
2016-03-01 11:23:03 -05:00
#
# VLANs
#
class VLANSerializer(CustomFieldModelSerializer):
site = NestedSiteSerializer()
group = NestedVLANGroupSerializer()
tenant = NestedTenantSerializer()
status = ChoiceFieldSerializer(choices=VLAN_STATUS_CHOICES)
role = NestedRoleSerializer()
2016-03-01 11:23:03 -05:00
class Meta:
model = VLAN
fields = [
'id', 'site', 'group', 'vid', 'name', 'tenant', 'status', 'role', 'description', 'display_name',
'custom_fields',
]
2016-03-01 11:23:03 -05:00
class NestedVLANSerializer(serializers.ModelSerializer):
2017-01-31 10:40:53 -05:00
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlan-detail')
2016-03-01 11:23:03 -05:00
class Meta:
model = VLAN
fields = ['id', 'url', 'vid', 'name', 'display_name']
2016-03-01 11:23:03 -05:00
class WritableVLANSerializer(serializers.ModelSerializer):
class Meta:
model = VLAN
fields = [
'id', 'site', 'group', 'vid', 'name', 'tenant', 'status', 'role', 'description',
]
2016-03-01 11:23:03 -05:00
#
# Prefixes
#
class PrefixSerializer(CustomFieldModelSerializer):
site = NestedSiteSerializer()
vrf = NestedVRFSerializer()
tenant = NestedTenantSerializer()
vlan = NestedVLANSerializer()
status = ChoiceFieldSerializer(choices=PREFIX_STATUS_CHOICES)
role = NestedRoleSerializer()
2016-03-01 11:23:03 -05:00
class Meta:
model = Prefix
fields = [
'id', 'family', 'prefix', 'site', 'vrf', 'tenant', 'vlan', 'status', 'role', 'is_pool', 'description',
'custom_fields',
]
2016-03-01 11:23:03 -05:00
class NestedPrefixSerializer(serializers.ModelSerializer):
2017-01-31 10:40:53 -05:00
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:prefix-detail')
2016-03-01 11:23:03 -05:00
class Meta:
model = Prefix
fields = ['id', 'url', 'family', 'prefix']
2016-03-01 11:23:03 -05:00
class WritablePrefixSerializer(serializers.ModelSerializer):
class Meta:
model = Prefix
fields = [
'id', 'family', 'prefix', 'site', 'vrf', 'tenant', 'vlan', 'status', 'role', 'is_pool', 'description',
]
2016-03-01 11:23:03 -05:00
#
# IP addresses
#
class IPAddressSerializer(CustomFieldModelSerializer):
vrf = NestedVRFSerializer()
tenant = NestedTenantSerializer()
status = ChoiceFieldSerializer(choices=IPADDRESS_STATUS_CHOICES)
interface = InterfaceSerializer()
2016-03-01 11:23:03 -05:00
class Meta:
model = IPAddress
fields = [
'id', 'family', 'address', 'vrf', 'tenant', 'status', 'interface', 'description', 'nat_inside',
'nat_outside', 'custom_fields',
]
2016-03-01 11:23:03 -05:00
class NestedIPAddressSerializer(serializers.ModelSerializer):
2017-01-31 10:40:53 -05:00
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddress-detail')
2016-03-01 11:23:03 -05:00
class Meta:
model = IPAddress
fields = ['id', 'url', 'family', 'address']
2016-03-01 11:23:03 -05:00
IPAddressSerializer._declared_fields['nat_inside'] = NestedIPAddressSerializer()
IPAddressSerializer._declared_fields['nat_outside'] = NestedIPAddressSerializer()
class WritableIPAddressSerializer(serializers.ModelSerializer):
class Meta:
model = IPAddress
fields = ['id', 'family', 'address', 'vrf', 'tenant', 'status', 'interface', 'description', 'nat_inside']
#
# Services
#
class ServiceSerializer(serializers.ModelSerializer):
device = NestedDeviceSerializer()
protocol = ChoiceFieldSerializer(choices=IP_PROTOCOL_CHOICES)
ipaddresses = NestedIPAddressSerializer(many=True)
class Meta:
model = Service
fields = ['id', 'device', 'name', 'port', 'protocol', 'ipaddresses', 'description']
2017-01-27 16:19:38 -05:00
class WritableServiceSerializer(serializers.ModelSerializer):
2017-01-27 16:19:38 -05:00
class Meta:
model = Service
fields = ['id', 'device', 'name', 'port', 'protocol', 'ipaddresses', 'description']