diff --git a/netbox/dcim/graphql/mixins.py b/netbox/dcim/graphql/mixins.py index 133d6259f..f8e626fe8 100644 --- a/netbox/dcim/graphql/mixins.py +++ b/netbox/dcim/graphql/mixins.py @@ -10,3 +10,11 @@ class CabledObjectMixin: def resolve_link_peers(self, info): return self.link_peers + + +class PathEndpointMixin: + connected_endpoints = graphene.List('dcim.graphql.gfk_mixins.LinkPeerType') + + def resolve_connected_endpoints(self, info): + # Handle empty values + return self.connected_endpoints or None diff --git a/netbox/dcim/graphql/types.py b/netbox/dcim/graphql/types.py index 41f0092f9..3c6c0a885 100644 --- a/netbox/dcim/graphql/types.py +++ b/netbox/dcim/graphql/types.py @@ -7,7 +7,7 @@ from extras.graphql.mixins import ( from ipam.graphql.mixins import IPAddressesMixin, VLANGroupsMixin from netbox.graphql.scalars import BigInt from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, NetBoxObjectType -from .mixins import CabledObjectMixin +from .mixins import CabledObjectMixin, PathEndpointMixin __all__ = ( 'CableType', @@ -117,7 +117,7 @@ class CableTerminationType(NetBoxObjectType): filterset_class = filtersets.CableTerminationFilterSet -class ConsolePortType(ComponentObjectType, CabledObjectMixin): +class ConsolePortType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin): class Meta: model = models.ConsolePort @@ -139,7 +139,7 @@ class ConsolePortTemplateType(ComponentTemplateObjectType): return self.type or None -class ConsoleServerPortType(ComponentObjectType, CabledObjectMixin): +class ConsoleServerPortType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin): class Meta: model = models.ConsoleServerPort @@ -241,7 +241,7 @@ class FrontPortTemplateType(ComponentTemplateObjectType): filterset_class = filtersets.FrontPortTemplateFilterSet -class InterfaceType(IPAddressesMixin, ComponentObjectType, CabledObjectMixin): +class InterfaceType(IPAddressesMixin, ComponentObjectType, CabledObjectMixin, PathEndpointMixin): class Meta: model = models.Interface @@ -354,7 +354,7 @@ class PlatformType(OrganizationalObjectType): filterset_class = filtersets.PlatformFilterSet -class PowerFeedType(NetBoxObjectType, CabledObjectMixin): +class PowerFeedType(NetBoxObjectType, CabledObjectMixin, PathEndpointMixin): class Meta: model = models.PowerFeed @@ -362,7 +362,7 @@ class PowerFeedType(NetBoxObjectType, CabledObjectMixin): filterset_class = filtersets.PowerFeedFilterSet -class PowerOutletType(ComponentObjectType, CabledObjectMixin): +class PowerOutletType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin): class Meta: model = models.PowerOutlet @@ -398,7 +398,7 @@ class PowerPanelType(NetBoxObjectType, ContactsMixin): filterset_class = filtersets.PowerPanelFilterSet -class PowerPortType(ComponentObjectType, CabledObjectMixin): +class PowerPortType(ComponentObjectType, CabledObjectMixin, PathEndpointMixin): class Meta: model = models.PowerPort