netbox/netbox/ipam/api/serializers.py

259 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, DeviceInterfaceSerializer, NestedSiteSerializer
from extras.api.serializers import CustomFieldValueSerializer
from ipam.models import Aggregate, IPAddress, Prefix, RIR, Role, Service, VLAN, VLANGroup, VRF
from tenancy.api.serializers import NestedTenantSerializer
2016-03-01 11:23:03 -05:00
#
# VRFs
#
class VRFSerializer(serializers.ModelSerializer):
tenant = NestedTenantSerializer()
custom_field_values = CustomFieldValueSerializer(many=True)
2016-03-01 11:23:03 -05:00
class Meta:
model = VRF
fields = ['id', 'name', 'rd', 'tenant', 'enforce_unique', 'description', 'custom_field_values']
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(serializers.ModelSerializer):
rir = NestedRIRSerializer()
custom_field_values = CustomFieldValueSerializer(many=True)
2016-03-01 11:23:03 -05:00
class Meta:
model = Aggregate
fields = ['id', 'family', 'prefix', 'rir', 'date_added', 'description', 'custom_field_values']
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(serializers.ModelSerializer):
site = NestedSiteSerializer()
group = NestedVLANGroupSerializer()
tenant = NestedTenantSerializer()
role = NestedRoleSerializer()
custom_field_values = CustomFieldValueSerializer(many=True)
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_field_values',
]
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(serializers.ModelSerializer):
site = NestedSiteSerializer()
vrf = NestedVRFSerializer()
tenant = NestedTenantSerializer()
vlan = NestedVLANSerializer()
role = NestedRoleSerializer()
custom_field_values = CustomFieldValueSerializer(many=True)
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_field_values',
]
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(serializers.ModelSerializer):
vrf = NestedVRFSerializer()
tenant = NestedTenantSerializer()
interface = DeviceInterfaceSerializer()
custom_field_values = CustomFieldValueSerializer(many=True)
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_field_values',
]
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()
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 DeviceServiceSerializer(serializers.ModelSerializer):
2017-01-31 10:40:53 -05:00
url = serializers.HyperlinkedIdentityField(view_name='ipam-api:service-detail')
2017-01-27 16:19:38 -05:00
ipaddresses = NestedIPAddressSerializer(many=True)
class Meta:
model = Service
fields = ['id', 'url', 'name', 'port', 'protocol', 'ipaddresses', 'description']