Просмотр исходного кода

#8157: Clean up L2VPN assignment for VM interfaces

jeremystretch 3 лет назад
Родитель
Сommit
4d3278cb52

+ 2 - 2
netbox/dcim/api/serializers.py

@@ -9,8 +9,8 @@ from dcim.choices import *
 from dcim.constants import *
 from dcim.constants import *
 from dcim.models import *
 from dcim.models import *
 from ipam.api.nested_serializers import (
 from ipam.api.nested_serializers import (
-    NestedASNSerializer, NestedIPAddressSerializer, NestedVLANSerializer, NestedVRFSerializer,
-    NestedL2VPNTerminationSerializer,
+    NestedASNSerializer, NestedIPAddressSerializer, NestedL2VPNTerminationSerializer, NestedVLANSerializer,
+    NestedVRFSerializer,
 )
 )
 from ipam.models import ASN, VLAN
 from ipam.models import ASN, VLAN
 from netbox.api import ChoiceField, ContentTypeField, SerializedPKRelatedField
 from netbox.api import ChoiceField, ContentTypeField, SerializedPKRelatedField

+ 3 - 3
netbox/templates/ipam/l2vpntermination.html

@@ -11,12 +11,12 @@
             <div class="card-body">
             <div class="card-body">
                 <table class="table table-hover">
                 <table class="table table-hover">
                     <tr>
                     <tr>
-                        <th scope="row">L2vPN</th>
-                        <td>{{ object.l2vpn.name|placeholder }}</td>
+                        <th scope="row">L2VPN</th>
+                        <td>{{ object.l2vpn|linkify }}</td>
                     </tr>
                     </tr>
                     <tr>
                     <tr>
                         <th scope="row">Assigned Object</th>
                         <th scope="row">Assigned Object</th>
-                        <td>{{ object.assigned_object.name|placeholder }}</td>
+                        <td>{{ object.assigned_object|linkify }}</td>
                     </tr>
                     </tr>
                 </table>
                 </table>
             </div>
             </div>

+ 6 - 3
netbox/virtualization/api/serializers.py

@@ -5,7 +5,9 @@ from dcim.api.nested_serializers import (
     NestedDeviceSerializer, NestedDeviceRoleSerializer, NestedPlatformSerializer, NestedSiteSerializer,
     NestedDeviceSerializer, NestedDeviceRoleSerializer, NestedPlatformSerializer, NestedSiteSerializer,
 )
 )
 from dcim.choices import InterfaceModeChoices
 from dcim.choices import InterfaceModeChoices
-from ipam.api.nested_serializers import NestedIPAddressSerializer, NestedVLANSerializer, NestedVRFSerializer
+from ipam.api.nested_serializers import (
+    NestedIPAddressSerializer, NestedL2VPNTerminationSerializer, NestedVLANSerializer, NestedVRFSerializer,
+)
 from ipam.models import VLAN
 from ipam.models import VLAN
 from netbox.api import ChoiceField, SerializedPKRelatedField
 from netbox.api import ChoiceField, SerializedPKRelatedField
 from netbox.api.serializers import NetBoxModelSerializer
 from netbox.api.serializers import NetBoxModelSerializer
@@ -121,6 +123,7 @@ class VMInterfaceSerializer(NetBoxModelSerializer):
         many=True
         many=True
     )
     )
     vrf = NestedVRFSerializer(required=False, allow_null=True)
     vrf = NestedVRFSerializer(required=False, allow_null=True)
+    l2vpn_termination = NestedL2VPNTerminationSerializer(read_only=True)
     count_ipaddresses = serializers.IntegerField(read_only=True)
     count_ipaddresses = serializers.IntegerField(read_only=True)
     count_fhrp_groups = serializers.IntegerField(read_only=True)
     count_fhrp_groups = serializers.IntegerField(read_only=True)
 
 
@@ -128,8 +131,8 @@ class VMInterfaceSerializer(NetBoxModelSerializer):
         model = VMInterface
         model = VMInterface
         fields = [
         fields = [
             'id', 'url', 'display', 'virtual_machine', 'name', 'enabled', 'parent', 'bridge', 'mtu', 'mac_address',
             'id', 'url', 'display', 'virtual_machine', 'name', 'enabled', 'parent', 'bridge', 'mtu', 'mac_address',
-            'description', 'mode', 'untagged_vlan', 'tagged_vlans', 'vrf', 'tags', 'custom_fields', 'created',
-            'last_updated', 'count_ipaddresses', 'count_fhrp_groups',
+            'description', 'mode', 'untagged_vlan', 'tagged_vlans', 'vrf', 'l2vpn_termination', 'tags', 'custom_fields',
+            'created', 'last_updated', 'count_ipaddresses', 'count_fhrp_groups',
         ]
         ]
 
 
     def validate(self, data):
     def validate(self, data):

+ 10 - 0
netbox/virtualization/models.py

@@ -440,6 +440,12 @@ class VMInterface(NetBoxModel, BaseInterface):
         object_id_field='interface_id',
         object_id_field='interface_id',
         related_query_name='+'
         related_query_name='+'
     )
     )
+    l2vpn_terminations = GenericRelation(
+        to='ipam.L2VPNTermination',
+        content_type_field='assigned_object_type',
+        object_id_field='assigned_object_id',
+        related_query_name='vminterface',
+    )
 
 
     class Meta:
     class Meta:
         verbose_name = 'interface'
         verbose_name = 'interface'
@@ -498,3 +504,7 @@ class VMInterface(NetBoxModel, BaseInterface):
     @property
     @property
     def parent_object(self):
     def parent_object(self):
         return self.virtual_machine
         return self.virtual_machine
+
+    @property
+    def l2vpn_termination(self):
+        return self.l2vpn_terminations.first()