diff --git a/netbox/dcim/api/serializers.py b/netbox/dcim/api/serializers.py
index fcee81615..4cb988c42 100644
--- a/netbox/dcim/api/serializers.py
+++ b/netbox/dcim/api/serializers.py
@@ -9,8 +9,8 @@ from dcim.choices import *
from dcim.constants import *
from dcim.models import *
from ipam.api.nested_serializers import (
- NestedASNSerializer, NestedIPAddressSerializer, NestedVLANSerializer, NestedVRFSerializer,
- NestedL2VPNTerminationSerializer,
+ NestedASNSerializer, NestedIPAddressSerializer, NestedL2VPNTerminationSerializer, NestedVLANSerializer,
+ NestedVRFSerializer,
)
from ipam.models import ASN, VLAN
from netbox.api import ChoiceField, ContentTypeField, SerializedPKRelatedField
diff --git a/netbox/templates/ipam/l2vpntermination.html b/netbox/templates/ipam/l2vpntermination.html
index 22e0cc324..b34d1a710 100644
--- a/netbox/templates/ipam/l2vpntermination.html
+++ b/netbox/templates/ipam/l2vpntermination.html
@@ -11,12 +11,12 @@
- L2vPN |
- {{ object.l2vpn.name|placeholder }} |
+ L2VPN |
+ {{ object.l2vpn|linkify }} |
Assigned Object |
- {{ object.assigned_object.name|placeholder }} |
+ {{ object.assigned_object|linkify }} |
diff --git a/netbox/virtualization/api/serializers.py b/netbox/virtualization/api/serializers.py
index bd01b5533..c5816dca8 100644
--- a/netbox/virtualization/api/serializers.py
+++ b/netbox/virtualization/api/serializers.py
@@ -5,7 +5,9 @@ from dcim.api.nested_serializers import (
NestedDeviceSerializer, NestedDeviceRoleSerializer, NestedPlatformSerializer, NestedSiteSerializer,
)
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 netbox.api import ChoiceField, SerializedPKRelatedField
from netbox.api.serializers import NetBoxModelSerializer
@@ -121,6 +123,7 @@ class VMInterfaceSerializer(NetBoxModelSerializer):
many=True
)
vrf = NestedVRFSerializer(required=False, allow_null=True)
+ l2vpn_termination = NestedL2VPNTerminationSerializer(read_only=True)
count_ipaddresses = serializers.IntegerField(read_only=True)
count_fhrp_groups = serializers.IntegerField(read_only=True)
@@ -128,8 +131,8 @@ class VMInterfaceSerializer(NetBoxModelSerializer):
model = VMInterface
fields = [
'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):
diff --git a/netbox/virtualization/models.py b/netbox/virtualization/models.py
index 02560a962..98321976f 100644
--- a/netbox/virtualization/models.py
+++ b/netbox/virtualization/models.py
@@ -440,6 +440,12 @@ class VMInterface(NetBoxModel, BaseInterface):
object_id_field='interface_id',
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:
verbose_name = 'interface'
@@ -498,3 +504,7 @@ class VMInterface(NetBoxModel, BaseInterface):
@property
def parent_object(self):
return self.virtual_machine
+
+ @property
+ def l2vpn_termination(self):
+ return self.l2vpn_terminations.first()