Skip to content

Feat/add fields site and redistribute policy #266

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 12 commits into
base: develop
Choose a base branch
from
49 changes: 45 additions & 4 deletions netbox_bgp/api/serializers.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from rest_framework.serializers import HyperlinkedIdentityField, ValidationError
from rest_framework.serializers import CharField, HyperlinkedIdentityField, ValidationError
from rest_framework.relations import PrimaryKeyRelatedField
from netbox.api.fields import ChoiceField, SerializedPKRelatedField
from netbox.api.serializers import NetBoxModelSerializer
from ipam.api.serializers import IPAddressSerializer, ASNSerializer, PrefixSerializer
from ipam.api.serializers import IPAddressSerializer, ASNSerializer, PrefixSerializer, VRFSerializer
from tenancy.api.serializers import TenantSerializer
from dcim.api.serializers import SiteSerializer, DeviceSerializer
from ipam.api.field_serializers import IPNetworkField
Expand All @@ -19,10 +19,11 @@
CommunityList,
CommunityListRule,
ASPathList,
ASPathListRule
ASPathListRule,
Redistributing
)

from netbox_bgp.choices import CommunityStatusChoices, SessionStatusChoices
from netbox_bgp.choices import CommunityStatusChoices, SessionStatusChoices, RedistributeSourceChoices


class ASPathListSerializer(NetBoxModelSerializer):
Expand All @@ -36,6 +37,7 @@ class Meta:
"name",
"display",
"description",
"site",
"tags",
"custom_fields",
"comments",
Expand Down Expand Up @@ -76,6 +78,8 @@ class Meta:
"display",
"name",
"description",
"site",
"redistributing",
"tags",
"custom_fields",
"comments",
Expand All @@ -94,6 +98,7 @@ class Meta:
"name",
"display",
"description",
"site",
"family",
"tags",
"custom_fields",
Expand Down Expand Up @@ -130,6 +135,7 @@ class Meta:
"display",
"name",
"description",
"site",
"import_policies",
"export_policies",
"comments",
Expand Down Expand Up @@ -264,6 +270,7 @@ class Meta:
"name",
"display",
"description",
"site",
"tags",
"custom_fields",
"comments",
Expand Down Expand Up @@ -387,3 +394,37 @@ class Meta:
)
brief_fields = ("id", "display", "description")


class RedistributingSerializer(NetBoxModelSerializer):
url = HyperlinkedIdentityField(view_name="plugins-api:netbox_bgp-api:redistributing-detail")
name = CharField(required=True, allow_null=False)
site = SiteSerializer(nested=True, required=False, allow_null=True)
vrf = VRFSerializer(nested=True, required=False, allow_null=True)
tenant = TenantSerializer(nested=True, required=False, allow_null=True)
device = DeviceSerializer(nested=True, required=False, allow_null=True)
virtualmachine = VirtualMachineSerializer(nested=True, required=False, allow_null=True)
redistribute_source = ChoiceField(choices=RedistributeSourceChoices, required=True, allow_null=False)
redistribute_policy = RoutingPolicySerializer(required=True, allow_null=False)

class Meta:
model = Redistributing
fields = (
"id",
"url",
"tags",
"custom_fields",
"display",
"site",
"vrf",
"tenant",
"device",
"virtualmachine",
"redistribute_source",
"redistribute_policy",
"created",
"last_updated",
"name",
"description",
"comments",
)
brief_fields = ("id", "url", "name", "display", "device", "virtualmachine", "redistribute_source", "redistribute_policy")
3 changes: 2 additions & 1 deletion netbox_bgp/api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
BGPSessionViewSet, RoutingPolicyViewSet, BGPPeerGroupViewSet, CommunityViewSet,
PrefixListViewSet, PrefixListRuleViewSet, RoutingPolicyRuleViewSet,
CommunityListViewSet, CommunityListRuleViewSet, RootView,
ASPathListViewSet, ASPathListRuleViewSet
ASPathListViewSet, ASPathListRuleViewSet, RedistributingViewSet,
)


Expand All @@ -23,5 +23,6 @@
router.register('community-list-rule', CommunityListRuleViewSet)
router.register('aspath-list', ASPathListViewSet)
router.register('aspath-list-rule', ASPathListRuleViewSet)
router.register('redistributing', RedistributingViewSet, 'redistributing')

urlpatterns = router.urls
12 changes: 9 additions & 3 deletions netbox_bgp/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,19 @@
BGPSessionSerializer, RoutingPolicySerializer, BGPPeerGroupSerializer,
CommunitySerializer, PrefixListSerializer, PrefixListRuleSerializer,
RoutingPolicyRuleSerializer, CommunityListSerializer, CommunityListRuleSerializer,
ASPathListSerializer, ASPathListRuleSerializer
ASPathListSerializer, ASPathListRuleSerializer, RedistributingSerializer,
)
from netbox_bgp.models import (
BGPSession, RoutingPolicy, BGPPeerGroup,
Community, PrefixList, PrefixListRule,
RoutingPolicyRule, CommunityList, CommunityListRule,
ASPathList, ASPathListRule
ASPathList, ASPathListRule, Redistributing,
)
from netbox_bgp.filtersets import (
BGPSessionFilterSet, RoutingPolicyFilterSet, BGPPeerGroupFilterSet,
CommunityFilterSet, PrefixListFilterSet, PrefixListRuleFilterSet,
RoutingPolicyRuleFilterSet, CommunityListFilterSet, CommunityListRuleFilterSet,
ASPathListFilterSet, ASPathListRuleFilterSet
ASPathListFilterSet, ASPathListRuleFilterSet, RedistributingFilterSet,
)

class RootView(APIRootView):
Expand Down Expand Up @@ -89,3 +89,9 @@ class ASPathListRuleViewSet(NetBoxModelViewSet):
queryset = ASPathListRule.objects.all()
serializer_class = ASPathListRuleSerializer
filterset_class = ASPathListRuleFilterSet


class RedistributingViewSet(NetBoxModelViewSet):
queryset = Redistributing.objects.all()
serializer_class = RedistributingSerializer
filterset_class = RedistributingFilterSet
22 changes: 22 additions & 0 deletions netbox_bgp/choices.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,28 @@ class SessionStatusChoices(ChoiceSet):
]


class RedistributeSourceChoices(ChoiceSet):
key = "Redistributing.redistribute_source"

REDISTRIBUTE_DIRECT = 'Direct'
REDISTRIBUTE_STATIC = 'Static'
REDISTRIBUTE_OSPF = 'OSPF'
REDISTRIBUTE_ISIS = 'IS-IS'
REDISTRIBUTE_EIGRP = 'EIGRP'
REDISTRIBUTE_RIP = 'RIP'
REDISTRIBUTE_BGP = 'BGP'

CHOICES = [
(REDISTRIBUTE_DIRECT, 'Direct', 'cyan'),
(REDISTRIBUTE_STATIC, 'Static', 'orange'),
(REDISTRIBUTE_OSPF, 'OSPF', 'green'),
(REDISTRIBUTE_ISIS, 'IS-IS', 'yellow'),
(REDISTRIBUTE_EIGRP, 'EIGRP', 'red'),
(REDISTRIBUTE_RIP, 'RIP', 'black'),
(REDISTRIBUTE_BGP, 'BGP', 'blue'),
]


class ActionChoices(ChoiceSet):
key = "Action.status"

Expand Down
Loading