Skip to content

Commit 644a62e

Browse files
authored
Merge pull request #181 from k01ek/develop
Develop
2 parents 789b547 + ff60d40 commit 644a62e

25 files changed

+1066
-173
lines changed

netbox_bgp/api/serializers.py

+45-14
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313

1414
from netbox_bgp.models import (
1515
BGPSession, RoutingPolicy, BGPPeerGroup,
16-
Community, RoutingPolicyRule, PrefixList, PrefixListRule,
16+
Community, RoutingPolicyRule, PrefixList,
17+
PrefixListRule, CommunityList, CommunityListRule
1718
)
1819

1920
from netbox_bgp.choices import CommunityStatusChoices, SessionStatusChoices
@@ -32,7 +33,7 @@ def to_representation(self, value):
3233
class RoutingPolicySerializer(NetBoxModelSerializer):
3334
class Meta:
3435
model = RoutingPolicy
35-
fields = ['id', 'name', 'description', 'tags', 'custom_fields']
36+
fields = ['id', 'name', 'description', 'tags', 'custom_fields', 'comments']
3637

3738

3839
class NestedRoutingPolicySerializer(WritableNestedSerializer):
@@ -44,6 +45,20 @@ class Meta:
4445
validators = []
4546

4647

48+
class NestedPrefixListSerializer(WritableNestedSerializer):
49+
url = HyperlinkedIdentityField(view_name='plugins:netbox_bgp:prefixlist')
50+
51+
class Meta:
52+
model = PrefixList
53+
fields = ['id', 'url', 'display', 'name']
54+
55+
56+
class PrefixListSerializer(NetBoxModelSerializer):
57+
class Meta:
58+
model = PrefixList
59+
fields = ['id', 'name', 'display','description', 'family', 'tags', 'custom_fields', 'comments']
60+
61+
4762
class BGPPeerGroupSerializer(NetBoxModelSerializer):
4863
import_policies = SerializedPKRelatedField(
4964
queryset=RoutingPolicy.objects.all(),
@@ -62,7 +77,7 @@ class BGPPeerGroupSerializer(NetBoxModelSerializer):
6277

6378
class Meta:
6479
model = BGPPeerGroup
65-
fields = ['id', 'display', 'name', 'description', 'import_policies', 'export_policies']
80+
fields = ['id', 'display', 'name', 'description', 'import_policies', 'export_policies', 'comments']
6681

6782

6883
class NestedBGPPeerGroupSerializer(WritableNestedSerializer):
@@ -84,6 +99,8 @@ class BGPSessionSerializer(NetBoxModelSerializer):
8499
local_as = NestedASNSerializer(required=True, allow_null=False)
85100
remote_as = NestedASNSerializer(required=True, allow_null=False)
86101
peer_group = NestedBGPPeerGroupSerializer(required=False, allow_null=True)
102+
prefix_list_in = NestedPrefixListSerializer(required=False, allow_null=True)
103+
prefix_list_out = NestedPrefixListSerializer(required=False, allow_null=True)
87104
import_policies = SerializedPKRelatedField(
88105
queryset=RoutingPolicy.objects.all(),
89106
serializer=NestedRoutingPolicySerializer,
@@ -106,8 +123,9 @@ class Meta:
106123
'display', 'status', 'site', 'tenant',
107124
'device', 'local_address', 'remote_address',
108125
'local_as', 'remote_as', 'peer_group', 'import_policies',
109-
'export_policies', 'created', 'last_updated',
110-
'name', 'description'
126+
'export_policies', 'prefix_list_in','prefix_list_out',
127+
'created', 'last_updated',
128+
'name', 'description', 'comments'
111129
]
112130

113131

@@ -146,7 +164,7 @@ class Meta:
146164
'id', 'tags', 'custom_fields', 'display',
147165
'status', 'tenant', 'created', 'last_updated',
148166
'description',
149-
'value', 'site', 'role'
167+
'value', 'site', 'role', 'comments'
150168
]
151169

152170
class NestedCommunitySerializer(WritableNestedSerializer):
@@ -159,18 +177,31 @@ class Meta:
159177
]
160178

161179

162-
class NestedPrefixListSerializer(WritableNestedSerializer):
163-
url = HyperlinkedIdentityField(view_name='plugins:netbox_bgp:prefixlist')
180+
class CommunityListSerializer(NetBoxModelSerializer):
181+
class Meta:
182+
model = CommunityList
183+
fields = ['id', 'name', 'display','description', 'tags', 'custom_fields', 'comments']
184+
185+
186+
class NestedCommunityListSerializer(WritableNestedSerializer):
187+
url = HyperlinkedIdentityField(view_name='plugins:netbox_bgp:communitylist')
164188

165189
class Meta:
166-
model = PrefixList
190+
model = CommunityList
167191
fields = ['id', 'url', 'display', 'name']
168192

169193

170-
class PrefixListSerializer(NetBoxModelSerializer):
194+
class CommunityListRuleSerializer(NetBoxModelSerializer):
195+
community_list = NestedCommunityListSerializer()
196+
community = NestedCommunitySerializer(required=False, allow_null=True)
197+
171198
class Meta:
172-
model = PrefixList
173-
fields = ['id', 'name', 'display','description', 'family', 'tags', 'custom_fields']
199+
model = CommunityListRule
200+
fields = [
201+
'id', 'tags', 'custom_fields', 'display',
202+
'community_list', 'created', 'last_updated',
203+
'action', 'community', 'comments'
204+
]
174205

175206

176207
class RoutingPolicyRuleSerializer(NetBoxModelSerializer):
@@ -196,7 +227,7 @@ class Meta:
196227
fields = [
197228
'id', 'index', 'display' ,'action', 'match_ip_address',
198229
'routing_policy', 'match_community', 'match_custom', 'set_actions',
199-
'match_ipv6_address', 'description', 'tags', 'custom_fields',
230+
'match_ipv6_address', 'description', 'tags', 'custom_fields', 'comments'
200231
]
201232

202233

@@ -211,5 +242,5 @@ class Meta:
211242
'id', 'tags', 'custom_fields', 'display',
212243
'prefix_list', 'created', 'last_updated',
213244
'index', 'action',
214-
'prefix_custom', 'ge', 'le', 'prefix'
245+
'prefix_custom', 'ge', 'le', 'prefix', 'comments'
215246
]

netbox_bgp/api/urls.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
from .views import (
44
BGPSessionViewSet, RoutingPolicyViewSet, BGPPeerGroupViewSet, CommunityViewSet,
5-
PrefixListViewSet, PrefixListRuleViewSet, RoutingPolicyRuleViewSet
5+
PrefixListViewSet, PrefixListRuleViewSet, RoutingPolicyRuleViewSet,
6+
CommunityListViewSet, CommunityListRuleViewSet
67
)
78

89
router = routers.DefaultRouter()
@@ -15,6 +16,7 @@
1516
router.register('community', CommunityViewSet)
1617
router.register('prefix-list', PrefixListViewSet)
1718
router.register('prefix-list-rule', PrefixListRuleViewSet)
18-
19+
router.register('community-list', CommunityListViewSet)
20+
router.register('community-list-rule', CommunityListRuleViewSet)
1921

2022
urlpatterns = router.urls

netbox_bgp/api/views.py

+23-4
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@
22

33
from .serializers import (
44
BGPSessionSerializer, RoutingPolicySerializer, BGPPeerGroupSerializer,
5-
CommunitySerializer, PrefixListSerializer, PrefixListRuleSerializer, RoutingPolicyRuleSerializer
5+
CommunitySerializer, PrefixListSerializer, PrefixListRuleSerializer,
6+
RoutingPolicyRuleSerializer, CommunityListSerializer, CommunityListRuleSerializer
67
)
7-
from netbox_bgp.models import BGPSession, RoutingPolicy, BGPPeerGroup, Community, PrefixList, PrefixListRule, RoutingPolicyRule
8-
from netbox_bgp.filters import (
8+
from netbox_bgp.models import (
9+
BGPSession, RoutingPolicy, BGPPeerGroup,
10+
Community, PrefixList, PrefixListRule,
11+
RoutingPolicyRule, CommunityList, CommunityListRule
12+
)
13+
from netbox_bgp.filtersets import (
914
BGPSessionFilterSet, RoutingPolicyFilterSet, BGPPeerGroupFilterSet,
10-
CommunityFilterSet, PrefixListFilterSet, PrefixListRuleFilterSet, RoutingPolicyRuleFilterSet
15+
CommunityFilterSet, PrefixListFilterSet, PrefixListRuleFilterSet,
16+
RoutingPolicyRuleFilterSet, CommunityListFilterSet, CommunityListRuleFilterSet
1117
)
1218

1319

@@ -41,11 +47,24 @@ class CommunityViewSet(NetBoxModelViewSet):
4147
filterset_class = CommunityFilterSet
4248

4349

50+
class CommunityListViewSet(NetBoxModelViewSet):
51+
queryset = CommunityList.objects.all()
52+
serializer_class = CommunityListSerializer
53+
filterset_class = CommunityListFilterSet
54+
55+
56+
class CommunityListRuleViewSet(NetBoxModelViewSet):
57+
queryset = CommunityListRule.objects.all()
58+
serializer_class = CommunityListRuleSerializer
59+
filterset_class = CommunityListRuleFilterSet
60+
61+
4462
class PrefixListViewSet(NetBoxModelViewSet):
4563
queryset = PrefixList.objects.all()
4664
serializer_class = PrefixListSerializer
4765
filterset_class = PrefixListFilterSet
4866

67+
4968
class PrefixListRuleViewSet(NetBoxModelViewSet):
5069

5170
queryset = PrefixListRule.objects.all()

netbox_bgp/filters.py renamed to netbox_bgp/filtersets.py

+40-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@
55
from extras.filters import TagFilter
66
from netbox.filtersets import NetBoxModelFilterSet
77

8-
from .models import Community, BGPSession, RoutingPolicy, RoutingPolicyRule, BGPPeerGroup, PrefixList, PrefixListRule
8+
from .models import (
9+
Community, BGPSession, RoutingPolicy, RoutingPolicyRule,
10+
BGPPeerGroup, PrefixList, PrefixListRule, CommunityList,
11+
CommunityListRule
12+
)
913
from ipam.models import IPAddress, ASN
1014
from dcim.models import Device, Site
1115

@@ -27,6 +31,41 @@ def search(self, queryset, name, value):
2731
return queryset.filter(qs_filter)
2832

2933

34+
class CommunityListFilterSet(NetBoxModelFilterSet):
35+
36+
class Meta:
37+
model = CommunityList
38+
fields = ['id', 'name', 'description']
39+
40+
def search(self, queryset, name, value):
41+
"""Perform the filtered search."""
42+
if not value.strip():
43+
return queryset
44+
qs_filter = (
45+
Q(name__icontains=value)
46+
| Q(description__icontains=value)
47+
)
48+
return queryset.filter(qs_filter)
49+
50+
51+
class CommunityListRuleFilterSet(NetBoxModelFilterSet):
52+
53+
class Meta:
54+
model = CommunityListRule
55+
fields = ['id', 'action', 'community_list', 'community_list_id']
56+
57+
def search(self, queryset, name, value):
58+
"""Perform the filtered search."""
59+
if not value.strip():
60+
return queryset
61+
qs_filter = (
62+
Q(action__icontains=value)
63+
| Q(community_list__icontains=value)
64+
| Q(community_list_id__icontains=value)
65+
)
66+
return queryset.filter(qs_filter)
67+
68+
3069
class BGPSessionFilterSet(NetBoxModelFilterSet):
3170

3271
remote_as = django_filters.ModelMultipleChoiceFilter(

0 commit comments

Comments
 (0)