From 85ca5301c5edeb9ff022f6565b754deea4dea542 Mon Sep 17 00:00:00 2001 From: jinaloo7 Date: Tue, 10 Aug 2021 17:41:33 +0530 Subject: [PATCH] extend circuit model and device model to add tenant info (#53) * extend circuit model and device model to add tenant info * update netbox circuit plugin with latest version 1.6.1 --- netbox/vapor/api/serializers.py | 43 ++++++++++++++++++++++++++++++--- requirements.extras.txt | 2 +- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/netbox/vapor/api/serializers.py b/netbox/vapor/api/serializers.py index b72a740f3..e28ff9996 100644 --- a/netbox/vapor/api/serializers.py +++ b/netbox/vapor/api/serializers.py @@ -9,15 +9,16 @@ from dcim.api.nested_serializers import ( NestedCableSerializer, ) from dcim.choices import InterfaceTypeChoices, InterfaceModeChoices -from dcim.models import Interface, Cable +from dcim.models import Interface, Cable, Device from ipam.api.nested_serializers import NestedPrefixSerializer from ipam.models import VLAN, Prefix -from tenancy.api.nested_serializers import NestedTenantGroupSerializer +from tenancy.api.nested_serializers import NestedTenantGroupSerializer, NestedTenantSerializer from tenancy.models import Tenant as Customer from utilities.utils import dynamic_import from netbox.api import ChoiceField, ValidatedModelSerializer, SerializedPKRelatedField, WritableNestedSerializer from netbox_virtual_circuit_plugin.models import VirtualCircuitVLAN, VirtualCircuit +from circuits.models import Circuit, CircuitTermination def get_serializer_for_model(model, prefix=''): @@ -32,6 +33,13 @@ def get_serializer_for_model(model, prefix=''): override_serializer_name = 'vapor.api.serializers.{}VLAN{}Serializer'.format( prefix, model_name ) + + # To extend Circuit model to support tenant field + if model_name == 'CircuitTermination': + override_serializer_name = 'vapor.api.serializers.{}Vapor{}Serializer'.format( + prefix, model_name + ) + try: return dynamic_import(override_serializer_name) except AttributeError: @@ -56,6 +64,15 @@ class NestedVirtualCircuitSerializer(ValidatedModelSerializer): fields = ['vcid', 'name', 'status', 'context'] +class NestedVaporDeviceSerializer(WritableNestedSerializer): + url = serializers.HyperlinkedIdentityField(view_name='dcim-api:device-detail') + tenant = NestedTenantSerializer() + + class Meta: + model = Device + fields = ['id', 'url', 'name', 'display_name', 'tenant'] + + class NestedVaporVLANSerializer(WritableNestedSerializer): url = serializers.HyperlinkedIdentityField(view_name='ipam-api:vlan-detail') @@ -80,7 +97,7 @@ class NestedVaporVLANSerializer(WritableNestedSerializer): class NestedVLANInterfaceSerializer(WritableNestedSerializer): - device = NestedDeviceSerializer(read_only=True) + device = NestedVaporDeviceSerializer(read_only=True) url = serializers.HyperlinkedIdentityField(view_name='dcim-api:interface-detail') type = ChoiceField(choices=InterfaceTypeChoices, required=False) @@ -166,9 +183,27 @@ class CustomerSerializer(TaggedObjectSerializer, CustomFieldModelSerializer): ] +class NestedCircuitSerializer(WritableNestedSerializer): + url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuit-detail') + tenant = NestedTenantSerializer() + + class Meta: + model = Circuit + fields = ['id', 'url', 'cid', 'tenant'] + + +class NestedVaporCircuitTerminationSerializer(WritableNestedSerializer): + url = serializers.HyperlinkedIdentityField(view_name='circuits-api:circuittermination-detail') + circuit = NestedCircuitSerializer() + + class Meta: + model = CircuitTermination + fields = ['id', 'url', 'circuit', 'term_side'] + + class InterfaceSerializer(TaggedObjectSerializer, CableTerminationSerializer, ConnectedEndpointSerializer): url = serializers.HyperlinkedIdentityField(view_name='dcim-api:interface-detail') - device = NestedDeviceSerializer() + device = NestedVaporDeviceSerializer() type = ChoiceField(choices=InterfaceTypeChoices) lag = NestedInterfaceSerializer(required=False, allow_null=True) mode = ChoiceField(choices=InterfaceModeChoices, required=False, allow_null=True) diff --git a/requirements.extras.txt b/requirements.extras.txt index d09e23de0..9a75b8c10 100644 --- a/requirements.extras.txt +++ b/requirements.extras.txt @@ -1,3 +1,3 @@ django-allauth==0.42.0 -netbox-virtual-circuit-plugin==1.6.0 +netbox-virtual-circuit-plugin==1.6.1 django-storages[google]==1.11.1