class NetworkToVlanSerializer(ChangedBySerializer): network = CidrAddressField() def validate_network(self, value): if value: network_exists = Network.objects.filter(network=value).first() if not network_exists: raise serializers.ValidationError("The network entered does not exist.") return network_exists return None class Meta: model = NetworkToVlan fields = "__all__"
class DefaultPoolSerializer(serializers.ModelSerializer): pool = serializers.CharField(allow_blank=True, allow_null=True) cidr = CidrAddressField() def validate_pool(self, value): if value: pool_exists = Pool.objects.filter(cidr=value).first() if not pool_exists: raise serializers.ValidationError("The pool entered does not exist.") return pool_exists return None class Meta: model = DefaultPool fields = "__all__"
class NetworkCreateUpdateSerializer(serializers.ModelSerializer): network = CidrAddressField() gateway = InetAddressField() dhcp_group = serializers.CharField() shared_network = serializers.CharField() def validate_dhcp_group(self, value): if value: dhcp_group_exists = DhcpGroup.objects.filter(name=value).first() if not dhcp_group_exists: raise serializers.ValidationError( "The dhcp group entered does not exist." ) return dhcp_group_exists return None def validate_shared_network(self, value): if value: shared_network_exists = SharedNetwork.objects.filter(name=value).first() if not shared_network_exists: raise serializers.ValidationError( "The shared network entered does not exist." ) return shared_network_exists return None def create(self, validated_data): validated_data["changed_by"] = self.context["request"].user instance = super(NetworkCreateUpdateSerializer, self).create(validated_data) network = Network.objects.filter(network=instance.network).first() if network: addresses = [] for address in network.network: reserved = False if address in ( network.gateway, network.network[0], network.network[-1], ): reserved = True pool = ( DefaultPool.objects.get_pool_default(address) if not reserved else None ) addresses.append( # TODO: Need to set pool eventually. Address( address=address, network=network, reserved=reserved, pool=pool, changed_by=self.context["request"].user, ) ) if addresses: Address.objects.bulk_create(addresses) return instance def update(self, instance, validated_data): validated_data["changed_by"] = self.context["request"].user return super(NetworkCreateUpdateSerializer, self).update( instance, validated_data ) class Meta: model = Network exclude = ("changed_by",)
class NetworkRangeSerializer(serializers.ModelSerializer): range = CidrAddressField() class Meta: model = NetworkRange fields = ("id", "range")