mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-08 08:38:16 -06:00
7025 CircuitRedundancyGroups
This commit is contained in:
parent
b0e7294bc1
commit
a4f84d6206
@ -76,3 +76,17 @@ class CircuitTerminationPortSpeedChoices(ChoiceSet):
|
||||
(1544, 'T1 (1.544 Mbps)'),
|
||||
(2048, 'E1 (2.048 Mbps)'),
|
||||
]
|
||||
|
||||
|
||||
class CircuitPriorityChoices(ChoiceSet):
|
||||
PRIORITY_PRIMARY = 'primary'
|
||||
PRIORITY_SECONDARY = 'secondary'
|
||||
PRIORITY_TERTIARY = 'tertiary'
|
||||
PRIORITY_INACTIVE = 'inactive'
|
||||
|
||||
CHOICES = (
|
||||
(PRIORITY_PRIMARY, _('Primary')),
|
||||
(PRIORITY_SECONDARY, _('Secondary')),
|
||||
(PRIORITY_TERTIARY, _('Tertiary')),
|
||||
(PRIORITY_INACTIVE, _('Inactive')),
|
||||
)
|
||||
|
@ -13,6 +13,7 @@ from .models import *
|
||||
|
||||
__all__ = (
|
||||
'CircuitFilterSet',
|
||||
'CircuitRedundancyGroupFilterSet',
|
||||
'CircuitTerminationFilterSet',
|
||||
'CircuitTypeFilterSet',
|
||||
'ProviderNetworkFilterSet',
|
||||
@ -303,3 +304,18 @@ class CircuitTerminationFilterSet(NetBoxModelFilterSet, CabledObjectFilterSet):
|
||||
Q(pp_info__icontains=value) |
|
||||
Q(description__icontains=value)
|
||||
).distinct()
|
||||
|
||||
|
||||
class CircuitRedundancyGroupFilterSet(NetBoxModelFilterSet):
|
||||
|
||||
class Meta:
|
||||
model = CircuitRedundancyGroup
|
||||
fields = ('id', 'name',)
|
||||
|
||||
def search(self, queryset, name, value):
|
||||
if not value.strip():
|
||||
return queryset
|
||||
return queryset.filter(
|
||||
Q(name__icontains=value) |
|
||||
Q(comments__icontains=value)
|
||||
).distinct()
|
||||
|
@ -11,6 +11,7 @@ from utilities.forms.fields import CSVChoiceField, CSVModelChoiceField, SlugFiel
|
||||
|
||||
__all__ = (
|
||||
'CircuitImportForm',
|
||||
'CircuitRedundancyGroupImportForm',
|
||||
'CircuitTerminationImportForm',
|
||||
'CircuitTerminationImportRelatedForm',
|
||||
'CircuitTypeImportForm',
|
||||
@ -150,3 +151,10 @@ class CircuitTerminationImportForm(NetBoxModelImportForm, BaseCircuitTermination
|
||||
'circuit', 'term_side', 'site', 'provider_network', 'port_speed', 'upstream_speed', 'xconnect_id',
|
||||
'pp_info', 'description', 'tags'
|
||||
]
|
||||
|
||||
|
||||
class CircuitRedundancyGroupImportForm(NetBoxModelImportForm):
|
||||
|
||||
class Meta:
|
||||
model = CircuitRedundancyGroup
|
||||
fields = ('name', 'tags')
|
||||
|
@ -13,6 +13,7 @@ from utilities.forms.widgets import DatePicker, NumberWithOptions
|
||||
|
||||
__all__ = (
|
||||
'CircuitFilterForm',
|
||||
'CircuitRedundancyGroupFilterForm',
|
||||
'CircuitTerminationFilterForm',
|
||||
'CircuitTypeFilterForm',
|
||||
'ProviderFilterForm',
|
||||
@ -230,3 +231,12 @@ class CircuitTerminationFilterForm(NetBoxModelFilterSetForm):
|
||||
label=_('Provider')
|
||||
)
|
||||
tag = TagFilterField(model)
|
||||
|
||||
|
||||
class CircuitRedundancyGroupFilterForm(NetBoxModelFilterSetForm):
|
||||
model = CircuitRedundancyGroup
|
||||
fieldsets = (
|
||||
FieldSet('q', 'filter_id', 'tag'),
|
||||
)
|
||||
selector_fields = ('filter_id', 'q', )
|
||||
tag = TagFilterField(model)
|
||||
|
@ -12,6 +12,7 @@ from utilities.forms.widgets import DatePicker, NumberWithOptions
|
||||
|
||||
__all__ = (
|
||||
'CircuitForm',
|
||||
'CircuitRedundancyGroupForm',
|
||||
'CircuitTerminationForm',
|
||||
'CircuitTypeForm',
|
||||
'ProviderForm',
|
||||
@ -171,3 +172,14 @@ class CircuitTerminationForm(NetBoxModelForm):
|
||||
options=CircuitTerminationPortSpeedChoices
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
class CircuitRedundancyGroupForm(TenancyForm, NetBoxModelForm):
|
||||
comments = CommentField()
|
||||
|
||||
class Meta:
|
||||
model = CircuitRedundancyGroup
|
||||
fields = [
|
||||
'name', 'tenant_group', 'tenant',
|
||||
'comments', 'tags',
|
||||
]
|
||||
|
@ -11,6 +11,8 @@ from utilities.fields import ColorField
|
||||
|
||||
__all__ = (
|
||||
'Circuit',
|
||||
'CircuitGroupAssignment',
|
||||
'CircuitRedundancyGroup',
|
||||
'CircuitTermination',
|
||||
'CircuitType',
|
||||
)
|
||||
@ -151,6 +153,39 @@ class Circuit(ContactsMixin, ImageAttachmentsMixin, PrimaryModel):
|
||||
raise ValidationError({'provider_account': "The assigned account must belong to the assigned provider."})
|
||||
|
||||
|
||||
class CircuitRedundancyGroup(PrimaryModel):
|
||||
"""
|
||||
"""
|
||||
name = models.CharField(
|
||||
verbose_name=_('name'),
|
||||
max_length=100
|
||||
)
|
||||
slug = models.SlugField(
|
||||
verbose_name=_('slug'),
|
||||
max_length=100
|
||||
)
|
||||
circuits = models.ManyToManyField(Circuit, through='CircuitGroupAssignment')
|
||||
|
||||
class Meta:
|
||||
ordering = ('name', 'pk') # Name may be non-unique
|
||||
verbose_name = _('Circuit redundancy group')
|
||||
verbose_name_plural = _('Circuit redundancy group')
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('circuits:circuitredundancygroup', args=[self.pk])
|
||||
|
||||
|
||||
class CircuitGroupAssignment(models.Model):
|
||||
circuit = models.ForeignKey(Circuit, on_delete=models.CASCADE)
|
||||
group = models.ForeignKey(CircuitRedundancyGroup, on_delete=models.CASCADE)
|
||||
priority = models.CharField(
|
||||
verbose_name=_('priority'),
|
||||
max_length=50,
|
||||
choices=CircuitPriorityChoices,
|
||||
blank=True
|
||||
)
|
||||
|
||||
|
||||
class CircuitTermination(
|
||||
CustomFieldsMixin,
|
||||
CustomLinksMixin,
|
||||
|
@ -9,6 +9,7 @@ from netbox.tables import NetBoxTable, columns
|
||||
from .columns import CommitRateColumn
|
||||
|
||||
__all__ = (
|
||||
'CircuitRedundancyGroupTable',
|
||||
'CircuitTable',
|
||||
'CircuitTerminationTable',
|
||||
'CircuitTypeTable',
|
||||
@ -119,3 +120,13 @@ class CircuitTerminationTable(NetBoxTable):
|
||||
'xconnect_id', 'pp_info', 'description', 'created', 'last_updated', 'actions',
|
||||
)
|
||||
default_columns = ('pk', 'id', 'circuit', 'provider', 'term_side', 'description')
|
||||
|
||||
|
||||
class CircuitRedundancyGroupTable(NetBoxTable):
|
||||
|
||||
class Meta(NetBoxTable.Meta):
|
||||
model = CircuitRedundancyGroup
|
||||
fields = (
|
||||
'pk', 'name', 'created', 'last_updated', 'actions',
|
||||
)
|
||||
default_columns = ('pk', 'name',)
|
||||
|
@ -55,4 +55,11 @@ urlpatterns = [
|
||||
path('circuit-terminations/delete/', views.CircuitTerminationBulkDeleteView.as_view(), name='circuittermination_bulk_delete'),
|
||||
path('circuit-terminations/<int:pk>/', include(get_model_urls('circuits', 'circuittermination'))),
|
||||
|
||||
# Circuit Redundacy Groups
|
||||
path('circuit-redundancy-groups/', views.CircuitRedundancyGroupListView.as_view(), name='circuitredundancygroup_list'),
|
||||
path('circuit-redundancy-groups/add/', views.CircuitRedundancyGroupEditView.as_view(), name='circuitredundancygroup_add'),
|
||||
path('circuit-redundancy-groups/import/', views.CircuitRedundancyGroupBulkImportView.as_view(), name='circuitredundancygroup_import'),
|
||||
# path('circuit-redundancy-groups/edit/', views.CircuitRedundancyGroupBulkEditView.as_view(), name='circuitredundancygroup_bulk_edit'),
|
||||
path('circuit-redundancy-groups/delete/', views.CircuitRedundancyGroupBulkDeleteView.as_view(), name='circuitredundancygroup_bulk_delete'),
|
||||
path('circuit-redundancy-groups/<int:pk>/', include(get_model_urls('circuits', 'circuitredundancygroup'))),
|
||||
]
|
||||
|
@ -440,3 +440,41 @@ class CircuitTerminationBulkDeleteView(generic.BulkDeleteView):
|
||||
|
||||
# Trace view
|
||||
register_model_view(CircuitTermination, 'trace', kwargs={'model': CircuitTermination})(PathTraceView)
|
||||
|
||||
|
||||
#
|
||||
# Circuit Redundacy Groups
|
||||
#
|
||||
|
||||
class CircuitRedundancyGroupListView(generic.ObjectListView):
|
||||
queryset = CircuitRedundancyGroup.objects.all()
|
||||
filterset = filtersets.CircuitRedundancyGroupFilterSet
|
||||
filterset_form = forms.CircuitRedundancyGroupFilterForm
|
||||
table = tables.CircuitRedundancyGroupTable
|
||||
|
||||
|
||||
@register_model_view(CircuitRedundancyGroup)
|
||||
class CircuitRedundancyGroupView(generic.ObjectView):
|
||||
queryset = CircuitRedundancyGroup.objects.all()
|
||||
|
||||
|
||||
@register_model_view(CircuitRedundancyGroup, 'edit')
|
||||
class CircuitRedundancyGroupEditView(generic.ObjectEditView):
|
||||
queryset = CircuitRedundancyGroup.objects.all()
|
||||
form = forms.CircuitRedundancyGroupForm
|
||||
|
||||
|
||||
@register_model_view(CircuitRedundancyGroup, 'delete')
|
||||
class CircuitRedundancyGroupDeleteView(generic.ObjectDeleteView):
|
||||
queryset = CircuitRedundancyGroup.objects.all()
|
||||
|
||||
|
||||
class CircuitRedundancyGroupBulkImportView(generic.BulkImportView):
|
||||
queryset = CircuitRedundancyGroup.objects.all()
|
||||
model_form = forms.CircuitRedundancyGroupImportForm
|
||||
|
||||
|
||||
class CircuitRedundancyGroupBulkDeleteView(generic.BulkDeleteView):
|
||||
queryset = CircuitRedundancyGroup.objects.all()
|
||||
filterset = filtersets.CircuitRedundancyGroupFilterSet
|
||||
table = tables.CircuitRedundancyGroupTable
|
||||
|
@ -259,6 +259,7 @@ CIRCUITS_MENU = Menu(
|
||||
get_model_item('circuits', 'circuit', _('Circuits')),
|
||||
get_model_item('circuits', 'circuittype', _('Circuit Types')),
|
||||
get_model_item('circuits', 'circuittermination', _('Circuit Terminations')),
|
||||
get_model_item('circuits', 'circuitredundancygroup', _('Circuit Redundancy Groups')),
|
||||
),
|
||||
),
|
||||
MenuGroup(
|
||||
|
Loading…
Reference in New Issue
Block a user