Skip to content

Commit

Permalink
v0.0.3 (#6)
Browse files Browse the repository at this point in the history
* Update Static Routing and Object models

* Add migrations
  • Loading branch information
DanSheps authored May 18, 2023
1 parent 02daba0 commit d26069f
Show file tree
Hide file tree
Showing 29 changed files with 731 additions and 47 deletions.
8 changes: 4 additions & 4 deletions netbox_routing/api/nested_serializers/objects.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class NestedPrefixListSerializer(WritableNestedSerializer):

class Meta:
model = PrefixList
fields = ('url', 'id', 'name')
fields = ('url', 'id', 'display', 'name')


class NestedPrefixListEntrySerializer(WritableNestedSerializer):
Expand All @@ -23,15 +23,15 @@ class NestedPrefixListEntrySerializer(WritableNestedSerializer):

class Meta:
model = PrefixListEntry
fields = ('url', 'id', 'prefix_list')
fields = ('url', 'id', 'display', 'prefix_list')


class NestedRouteMapSerializer(WritableNestedSerializer):
url = serializers.HyperlinkedIdentityField(view_name='plugins-api:netbox_routing-api:prefixlist-detail')

class Meta:
model = RouteMap
fields = ('url', 'id', 'name')
fields = ('url', 'id', 'display', 'name')


class NestedRouteMapEntrySerializer(WritableNestedSerializer):
Expand All @@ -40,4 +40,4 @@ class NestedRouteMapEntrySerializer(WritableNestedSerializer):

class Meta:
model = RouteMapEntry
fields = ('url', 'id', 'route_map')
fields = ('url', 'id', 'display', 'route_map')
2 changes: 1 addition & 1 deletion netbox_routing/api/nested_serializers/static.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ class NestedStaticRouteSerializer(WritableNestedSerializer):

class Meta:
model = StaticRoute
fields = ('url', 'id', 'prefix', 'next_hop', 'name', 'metric', 'permanent')
fields = ('url', 'id', 'display', 'prefix', 'next_hop', 'name', 'metric', 'permanent')
8 changes: 4 additions & 4 deletions netbox_routing/api/serializers/objects.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class PrefixListSerializer(NetBoxModelSerializer):

class Meta:
model = PrefixList
fields = ('url', 'id', 'name')
fields = ('url', 'id', 'display', 'name')


class PrefixListEntrySerializer(NetBoxModelSerializer):
Expand All @@ -24,15 +24,15 @@ class PrefixListEntrySerializer(NetBoxModelSerializer):

class Meta:
model = PrefixListEntry
fields = ('url', 'id', 'prefix_list', 'sequence', 'type', 'prefix', 'le', 'ge')
fields = ('url', 'id', 'display', 'prefix_list', 'sequence', 'type', 'prefix', 'le', 'ge')


class RouteMapSerializer(NetBoxModelSerializer):
url = serializers.HyperlinkedIdentityField(view_name='plugins-api:netbox_routing-api:prefixlist-detail')

class Meta:
model = RouteMap
fields = ('url', 'id', 'name')
fields = ('url', 'id', 'display', 'name')


class RouteMapEntrySerializer(NetBoxModelSerializer):
Expand All @@ -42,4 +42,4 @@ class RouteMapEntrySerializer(NetBoxModelSerializer):

class Meta:
model = RouteMapEntry
fields = ('url', 'id', 'route_map', 'sequence', 'type')
fields = ('url', 'id', 'display', 'route_map', 'sequence', 'type')
2 changes: 1 addition & 1 deletion netbox_routing/api/serializers/static.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,4 @@ class StaticRouteSerializer(NetBoxModelSerializer):

class Meta:
model = StaticRoute
fields = ('url', 'id', 'devices', 'vrf', 'prefix', 'next_hop', 'name', 'metric', 'permanent')
fields = ('url', 'id', 'display', 'devices', 'vrf', 'prefix', 'next_hop', 'name', 'metric', 'permanent')
4 changes: 2 additions & 2 deletions netbox_routing/choices/objects.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ class PermitDenyChoices(ChoiceSet):
DENY = 'deny'

CHOICES = [
(PERMIT, 'Permit'),
(DENY, 'Deny')
(PERMIT, 'Permit', 'blue'),
(DENY, 'Deny', 'red')
]
36 changes: 36 additions & 0 deletions netbox_routing/filtersets/objects.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import django_filters
import netaddr
from django.db.models import Q

from netbox.filtersets import NetBoxModelFilterSet
from netbox_routing.models import PrefixList, PrefixListEntry, RouteMapEntry, RouteMap
Expand All @@ -10,6 +11,14 @@ class Meta:
model = PrefixList
fields = ()

def search(self, queryset, name, value):
if not value.strip():
return queryset
qs_filter = (
Q(name=value)
)
return queryset.filter(qs_filter).distinct()


class PrefixListEntryFilterSet(NetBoxModelFilterSet):

Expand All @@ -22,6 +31,16 @@ class Meta:
model = PrefixListEntry
fields = ('prefix_list', 'prefix', 'sequence', 'type', 'le', 'ge')

def search(self, queryset, name, value):
if not value.strip():
return queryset
qs_filter = (
Q(prefix_list__name__icontains=value) |
Q(prefix__icontains=value) |
Q(type=value)
)
return queryset.filter(qs_filter).distinct()

def filter_prefix(self, queryset, name, value):
if not value.strip():
return queryset
Expand All @@ -38,9 +57,26 @@ class Meta:
model = RouteMap
fields = ()

def search(self, queryset, name, value):
if not value.strip():
return queryset
qs_filter = (
Q(name__icontains=value)
)
return queryset.filter(qs_filter).distinct()


class RouteMapEntryFilterSet(NetBoxModelFilterSet):

class Meta:
model = RouteMapEntry
fields = ('route_map', 'sequence', 'type')

def search(self, queryset, name, value):
if not value.strip():
return queryset
qs_filter = (
Q(route_map__name__icontains=value) |
Q(type=value)
)
return queryset.filter(qs_filter).distinct()
14 changes: 14 additions & 0 deletions netbox_routing/filtersets/static.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import django_filters
import netaddr
from django.db.models import Q

from netbox.filtersets import NetBoxModelFilterSet
from netbox_routing.models import StaticRoute
Expand All @@ -21,6 +22,19 @@ class Meta:
model = StaticRoute
fields = ('vrf', 'prefix', 'devices', 'metric', 'next_hop')

def search(self, queryset, name, value):
if not value.strip():
return queryset
qs_filter = (
Q(devices__name__icontains=value) |
Q(vrf__name__icontains=value) |
Q(vrf__rd__icontains=value) |
Q(prefix__icontains=value) |
Q(next_hop__icontains=value) |
Q(name__icontains=value)
)
return queryset.filter(qs_filter).distinct()

def filter_prefix(self, queryset, name, value):
if not value.strip():
return queryset
Expand Down
1 change: 1 addition & 0 deletions netbox_routing/forms/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from .filtersets import *
from .bulk_edit import *
from .objects import PrefixListForm, PrefixListEntryForm, RouteMapForm, RouteMapEntryForm
from .static import StaticRouteForm

Expand Down
8 changes: 8 additions & 0 deletions netbox_routing/forms/bulk_edit/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from .objects import *


__all__ = (
'PrefixListEntryBulkEditForm',
'RouteMapEntryBulkEditForm'
)

42 changes: 42 additions & 0 deletions netbox_routing/forms/bulk_edit/objects.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@

from django.utils.translation import gettext as _

from netbox.forms import NetBoxModelBulkEditForm
from netbox_routing.models import PrefixList, PrefixListEntry, RouteMapEntry, RouteMap
from utilities.forms.fields import DynamicModelChoiceField


__all__ = (
'PrefixListEntryBulkEditForm',
'RouteMapEntryBulkEditForm'
)


class PrefixListEntryBulkEditForm(NetBoxModelBulkEditForm):
prefix_list = DynamicModelChoiceField(
queryset=PrefixList.objects.all(),
label=_('Prefix List'),
required=False,
selector=True
)

model = PrefixListEntry
fieldsets = (
(None, ('prefix_list', )),
)
nullable_fields = ()


class RouteMapEntryBulkEditForm(NetBoxModelBulkEditForm):
route_map = DynamicModelChoiceField(
queryset=RouteMap.objects.all(),
label=_('Route Map'),
required=False,
selector=True
)

model = RouteMapEntry
fieldsets = (
(None, ('route_map', )),
)
nullable_fields = ()
15 changes: 14 additions & 1 deletion netbox_routing/forms/filtersets/static.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
from ipam.models import VRF
from netbox.forms import NetBoxModelFilterSetForm
from netbox_routing.models import StaticRoute
from utilities.forms.fields import DynamicModelMultipleChoiceField, TagFilterField
from django.utils.translation import gettext as _


class StaticRouteFilterSetForm(NetBoxModelFilterSetForm):
model = StaticRoute
model = StaticRoute
fieldsets = (
(None, ('q', 'filter_id', 'tag', 'vrf')),
)
vrf = DynamicModelMultipleChoiceField(
queryset=VRF.objects.all(),
required=False,
selector=True,
label=_('VRF'),
)
tag = TagFilterField(model)
39 changes: 39 additions & 0 deletions netbox_routing/migrations/0002_netboxmodel_updates.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Generated by Django 4.1.7 on 2023-05-18 13:43

from django.db import migrations, models
import utilities.json


class Migration(migrations.Migration):

dependencies = [
('netbox_routing', '0001_initial'),
]

operations = [
migrations.AlterField(
model_name='prefixlist',
name='custom_field_data',
field=models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder),
),
migrations.AlterField(
model_name='prefixlistentry',
name='custom_field_data',
field=models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder),
),
migrations.AlterField(
model_name='routemap',
name='custom_field_data',
field=models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder),
),
migrations.AlterField(
model_name='routemapentry',
name='custom_field_data',
field=models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder),
),
migrations.AlterField(
model_name='staticroute',
name='custom_field_data',
field=models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder),
),
]
54 changes: 54 additions & 0 deletions netbox_routing/migrations/0003_model_ordering_and_constraints.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Generated by Django 4.1.7 on 2023-05-18 13:45

from django.db import migrations, models
import django.db.models.functions.text


class Migration(migrations.Migration):

dependencies = [
('netbox_routing', '0002_netboxmodel_updates'),
]

operations = [
migrations.AlterModelOptions(
name='prefixlist',
options={'ordering': ['name']},
),
migrations.AlterModelOptions(
name='prefixlistentry',
options={'ordering': ['prefix_list', 'sequence']},
),
migrations.AlterModelOptions(
name='routemap',
options={'ordering': ['name']},
),
migrations.AlterModelOptions(
name='routemapentry',
options={'ordering': ['route_map', 'sequence']},
),
migrations.AlterModelOptions(
name='staticroute',
options={'ordering': ['vrf', 'prefix', 'metric']},
),
migrations.AddConstraint(
model_name='prefixlist',
constraint=models.UniqueConstraint(django.db.models.functions.text.Lower('name'), name='netbox_routing_prefixlist_unique_name', violation_error_message='Name must be unique.'),
),
migrations.AddConstraint(
model_name='prefixlistentry',
constraint=models.UniqueConstraint(models.F('prefix_list'), models.F('sequence'), name='netbox_routing_prefixlistentry_unique_prefixlist_sequence', violation_error_message='Prefix List sequence must be unique.'),
),
migrations.AddConstraint(
model_name='routemap',
constraint=models.UniqueConstraint(django.db.models.functions.text.Lower('name'), name='netbox_routing_routemap_unique_name', violation_error_message='Name must be unique.'),
),
migrations.AddConstraint(
model_name='routemapentry',
constraint=models.UniqueConstraint(models.F('route_map'), models.F('sequence'), name='netbox_routing_routemapentry_unique_routemap_sequence', violation_error_message='Route Map sequence must be unique.'),
),
migrations.AddConstraint(
model_name='staticroute',
constraint=models.UniqueConstraint(models.F('vrf'), models.F('prefix'), models.F('next_hop'), name='netbox_routing_staticroute_unique_vrf_prefix_nexthop', violation_error_message='VRF, Prefix and Next Hop must be unique.'),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 4.1.7 on 2023-05-18 13:50

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('netbox_routing', '0003_model_ordering_and_constraints'),
]

operations = [
migrations.AlterField(
model_name='prefixlistentry',
name='ge',
field=models.PositiveSmallIntegerField(blank=True, null=True),
),
migrations.AlterField(
model_name='prefixlistentry',
name='le',
field=models.PositiveSmallIntegerField(blank=True, null=True),
),
]
Loading

0 comments on commit d26069f

Please sign in to comment.