mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-08 08:38:16 -06:00
7025 CircuitRedundancyGroups api
This commit is contained in:
parent
a4f84d6206
commit
6260af3623
@ -1,7 +1,7 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from circuits.choices import CircuitStatusChoices
|
from circuits.choices import CircuitStatusChoices
|
||||||
from circuits.models import Circuit, CircuitTermination, CircuitType
|
from circuits.models import Circuit, CircuitRedundancyGroup, CircuitTermination, CircuitType
|
||||||
from dcim.api.serializers_.cables import CabledObjectSerializer
|
from dcim.api.serializers_.cables import CabledObjectSerializer
|
||||||
from dcim.api.serializers_.sites import SiteSerializer
|
from dcim.api.serializers_.sites import SiteSerializer
|
||||||
from netbox.api.fields import ChoiceField, RelatedObjectCountField
|
from netbox.api.fields import ChoiceField, RelatedObjectCountField
|
||||||
@ -12,6 +12,7 @@ from .providers import ProviderAccountSerializer, ProviderNetworkSerializer, Pro
|
|||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'CircuitSerializer',
|
'CircuitSerializer',
|
||||||
|
'CircuitRedundancyGroupSerializer',
|
||||||
'CircuitTerminationSerializer',
|
'CircuitTerminationSerializer',
|
||||||
'CircuitTypeSerializer',
|
'CircuitTypeSerializer',
|
||||||
)
|
)
|
||||||
@ -75,3 +76,14 @@ class CircuitTerminationSerializer(NetBoxModelSerializer, CabledObjectSerializer
|
|||||||
'link_peers', 'link_peers_type', 'tags', 'custom_fields', 'created', 'last_updated', '_occupied',
|
'link_peers', 'link_peers_type', 'tags', 'custom_fields', 'created', 'last_updated', '_occupied',
|
||||||
]
|
]
|
||||||
brief_fields = ('id', 'url', 'display', 'circuit', 'term_side', 'description', 'cable', '_occupied')
|
brief_fields = ('id', 'url', 'display', 'circuit', 'term_side', 'description', 'cable', '_occupied')
|
||||||
|
|
||||||
|
|
||||||
|
class CircuitRedundancyGroupSerializer(NetBoxModelSerializer):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = CircuitRedundancyGroup
|
||||||
|
fields = [
|
||||||
|
'id', 'url', 'display_url', 'display', 'name',
|
||||||
|
'tags', 'custom_fields', 'created', 'last_updated',
|
||||||
|
]
|
||||||
|
brief_fields = ('id', 'url', 'display', 'name',)
|
||||||
|
@ -14,6 +14,7 @@ router.register('provider-networks', views.ProviderNetworkViewSet)
|
|||||||
router.register('circuit-types', views.CircuitTypeViewSet)
|
router.register('circuit-types', views.CircuitTypeViewSet)
|
||||||
router.register('circuits', views.CircuitViewSet)
|
router.register('circuits', views.CircuitViewSet)
|
||||||
router.register('circuit-terminations', views.CircuitTerminationViewSet)
|
router.register('circuit-terminations', views.CircuitTerminationViewSet)
|
||||||
|
router.register('circuit-redundancy-groups', views.CircuitRedundancyGroupViewSet)
|
||||||
|
|
||||||
app_name = 'circuits-api'
|
app_name = 'circuits-api'
|
||||||
urlpatterns = router.urls
|
urlpatterns = router.urls
|
||||||
|
@ -55,6 +55,16 @@ class CircuitTerminationViewSet(PassThroughPortMixin, NetBoxModelViewSet):
|
|||||||
filterset_class = filtersets.CircuitTerminationFilterSet
|
filterset_class = filtersets.CircuitTerminationFilterSet
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Circuits
|
||||||
|
#
|
||||||
|
|
||||||
|
class CircuitRedundancyGroupViewSet(NetBoxModelViewSet):
|
||||||
|
queryset = CircuitRedundancyGroup.objects.all()
|
||||||
|
serializer_class = serializers.CircuitRedundancyGroupSerializer
|
||||||
|
filterset_class = filtersets.CircuitRedundancyGroupFilterSet
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Provider accounts
|
# Provider accounts
|
||||||
#
|
#
|
||||||
|
@ -7,6 +7,7 @@ from netbox.graphql.filter_mixins import autotype_decorator, BaseFilterMixin
|
|||||||
__all__ = (
|
__all__ = (
|
||||||
'CircuitTerminationFilter',
|
'CircuitTerminationFilter',
|
||||||
'CircuitFilter',
|
'CircuitFilter',
|
||||||
|
'CircuitRedundancyGroupFilter',
|
||||||
'CircuitTypeFilter',
|
'CircuitTypeFilter',
|
||||||
'ProviderFilter',
|
'ProviderFilter',
|
||||||
'ProviderAccountFilter',
|
'ProviderAccountFilter',
|
||||||
@ -32,6 +33,12 @@ class CircuitTypeFilter(BaseFilterMixin):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@strawberry_django.filter(models.CircuitRedundancyGroup, lookups=True)
|
||||||
|
@autotype_decorator(filtersets.CircuitRedundancyGroupFilterSet)
|
||||||
|
class CircuitRedundancyGroupFilter(BaseFilterMixin):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
@strawberry_django.filter(models.Provider, lookups=True)
|
@strawberry_django.filter(models.Provider, lookups=True)
|
||||||
@autotype_decorator(filtersets.ProviderFilterSet)
|
@autotype_decorator(filtersets.ProviderFilterSet)
|
||||||
class ProviderFilter(BaseFilterMixin):
|
class ProviderFilter(BaseFilterMixin):
|
||||||
|
@ -24,6 +24,11 @@ class CircuitsQuery:
|
|||||||
return models.CircuitType.objects.get(pk=id)
|
return models.CircuitType.objects.get(pk=id)
|
||||||
circuit_type_list: List[CircuitTypeType] = strawberry_django.field()
|
circuit_type_list: List[CircuitTypeType] = strawberry_django.field()
|
||||||
|
|
||||||
|
@strawberry.field
|
||||||
|
def circuit_redundancy_group(self, id: int) -> CircuitRedundancyGroupType:
|
||||||
|
return models.CircuitRedundancyGroup.objects.get(pk=id)
|
||||||
|
circuit_redundancy_group_list: List[CircuitRedundancyGroupType] = strawberry_django.field()
|
||||||
|
|
||||||
@strawberry.field
|
@strawberry.field
|
||||||
def provider(self, id: int) -> ProviderType:
|
def provider(self, id: int) -> ProviderType:
|
||||||
return models.Provider.objects.get(pk=id)
|
return models.Provider.objects.get(pk=id)
|
||||||
|
@ -13,6 +13,7 @@ from .filters import *
|
|||||||
__all__ = (
|
__all__ = (
|
||||||
'CircuitTerminationType',
|
'CircuitTerminationType',
|
||||||
'CircuitType',
|
'CircuitType',
|
||||||
|
'CircuitRedundancyGroupType',
|
||||||
'CircuitTypeType',
|
'CircuitTypeType',
|
||||||
'ProviderType',
|
'ProviderType',
|
||||||
'ProviderAccountType',
|
'ProviderAccountType',
|
||||||
@ -91,3 +92,12 @@ class CircuitType(NetBoxObjectType, ContactsMixin):
|
|||||||
tenant: TenantType | None
|
tenant: TenantType | None
|
||||||
|
|
||||||
terminations: List[CircuitTerminationType]
|
terminations: List[CircuitTerminationType]
|
||||||
|
|
||||||
|
|
||||||
|
@strawberry_django.type(
|
||||||
|
models.CircuitRedundancyGroup,
|
||||||
|
fields='__all__',
|
||||||
|
filters=CircuitRedundancyGroupFilter
|
||||||
|
)
|
||||||
|
class CircuitRedundancyGroupType(CustomFieldsMixin, TagsMixin, ObjectType):
|
||||||
|
pass
|
||||||
|
@ -0,0 +1,53 @@
|
|||||||
|
# Generated by Django 5.0.7 on 2024-07-16 09:18
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
import taggit.managers
|
||||||
|
import utilities.json
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('circuits', '0043_circuittype_color'),
|
||||||
|
('extras', '0118_notifications'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='CircuitGroupAssignment',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
|
||||||
|
('priority', models.CharField(blank=True, max_length=50)),
|
||||||
|
('circuit', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='circuits.circuit')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='CircuitRedundancyGroup',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)),
|
||||||
|
('created', models.DateTimeField(auto_now_add=True, null=True)),
|
||||||
|
('last_updated', models.DateTimeField(auto_now=True, null=True)),
|
||||||
|
(
|
||||||
|
'custom_field_data',
|
||||||
|
models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder),
|
||||||
|
),
|
||||||
|
('description', models.CharField(blank=True, max_length=200)),
|
||||||
|
('comments', models.TextField(blank=True)),
|
||||||
|
('name', models.CharField(max_length=100)),
|
||||||
|
('slug', models.SlugField(max_length=100)),
|
||||||
|
('circuits', models.ManyToManyField(through='circuits.CircuitGroupAssignment', to='circuits.circuit')),
|
||||||
|
('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Circuit redundancy group',
|
||||||
|
'verbose_name_plural': 'Circuit redundancy group',
|
||||||
|
'ordering': ('name', 'pk'),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='circuitgroupassignment',
|
||||||
|
name='group',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='circuits.circuitredundancygroup'),
|
||||||
|
),
|
||||||
|
]
|
Loading…
Reference in New Issue
Block a user