7025 CircuitRedundancyGroups api

This commit is contained in:
Arthur Hanson 2024-07-16 16:46:15 +07:00
parent a4f84d6206
commit 6260af3623
7 changed files with 99 additions and 1 deletions

View File

@ -1,7 +1,7 @@
from rest_framework import serializers
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_.sites import SiteSerializer
from netbox.api.fields import ChoiceField, RelatedObjectCountField
@ -12,6 +12,7 @@ from .providers import ProviderAccountSerializer, ProviderNetworkSerializer, Pro
__all__ = (
'CircuitSerializer',
'CircuitRedundancyGroupSerializer',
'CircuitTerminationSerializer',
'CircuitTypeSerializer',
)
@ -75,3 +76,14 @@ class CircuitTerminationSerializer(NetBoxModelSerializer, CabledObjectSerializer
'link_peers', 'link_peers_type', 'tags', 'custom_fields', 'created', 'last_updated', '_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',)

View File

@ -14,6 +14,7 @@ router.register('provider-networks', views.ProviderNetworkViewSet)
router.register('circuit-types', views.CircuitTypeViewSet)
router.register('circuits', views.CircuitViewSet)
router.register('circuit-terminations', views.CircuitTerminationViewSet)
router.register('circuit-redundancy-groups', views.CircuitRedundancyGroupViewSet)
app_name = 'circuits-api'
urlpatterns = router.urls

View File

@ -55,6 +55,16 @@ class CircuitTerminationViewSet(PassThroughPortMixin, NetBoxModelViewSet):
filterset_class = filtersets.CircuitTerminationFilterSet
#
# Circuits
#
class CircuitRedundancyGroupViewSet(NetBoxModelViewSet):
queryset = CircuitRedundancyGroup.objects.all()
serializer_class = serializers.CircuitRedundancyGroupSerializer
filterset_class = filtersets.CircuitRedundancyGroupFilterSet
#
# Provider accounts
#

View File

@ -7,6 +7,7 @@ from netbox.graphql.filter_mixins import autotype_decorator, BaseFilterMixin
__all__ = (
'CircuitTerminationFilter',
'CircuitFilter',
'CircuitRedundancyGroupFilter',
'CircuitTypeFilter',
'ProviderFilter',
'ProviderAccountFilter',
@ -32,6 +33,12 @@ class CircuitTypeFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.CircuitRedundancyGroup, lookups=True)
@autotype_decorator(filtersets.CircuitRedundancyGroupFilterSet)
class CircuitRedundancyGroupFilter(BaseFilterMixin):
pass
@strawberry_django.filter(models.Provider, lookups=True)
@autotype_decorator(filtersets.ProviderFilterSet)
class ProviderFilter(BaseFilterMixin):

View File

@ -24,6 +24,11 @@ class CircuitsQuery:
return models.CircuitType.objects.get(pk=id)
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
def provider(self, id: int) -> ProviderType:
return models.Provider.objects.get(pk=id)

View File

@ -13,6 +13,7 @@ from .filters import *
__all__ = (
'CircuitTerminationType',
'CircuitType',
'CircuitRedundancyGroupType',
'CircuitTypeType',
'ProviderType',
'ProviderAccountType',
@ -91,3 +92,12 @@ class CircuitType(NetBoxObjectType, ContactsMixin):
tenant: TenantType | None
terminations: List[CircuitTerminationType]
@strawberry_django.type(
models.CircuitRedundancyGroup,
fields='__all__',
filters=CircuitRedundancyGroupFilter
)
class CircuitRedundancyGroupType(CustomFieldsMixin, TagsMixin, ObjectType):
pass

View File

@ -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'),
),
]