diff --git a/netbox/dcim/graphql/types.py b/netbox/dcim/graphql/types.py index ac7134e56..c1f7f03f1 100644 --- a/netbox/dcim/graphql/types.py +++ b/netbox/dcim/graphql/types.py @@ -237,47 +237,47 @@ class DeviceType(ConfigContextMixin, ImageAttachmentsMixin, ContactsMixin, NetBo @strawberry_django.field def interfaces(self) -> List[Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')]]: - return self.clusters.all() + return self.interaces.all() @strawberry_django.field def rearports(self) -> List[Annotated["RearPortType", strawberry.lazy('dcim.graphql.types')]]: - return self.clusters.all() + return self.rearports.all() @strawberry_django.field def consoleports(self) -> List[Annotated["ConsolePortType", strawberry.lazy('dcim.graphql.types')]]: - return self.clusters.all() + return self.consoleports.all() @strawberry_django.field def powerports(self) -> List[Annotated["PowerPortType", strawberry.lazy('dcim.graphql.types')]]: - return self.clusters.all() + return self.powerports.all() @strawberry_django.field def cabletermination_set(self) -> List[Annotated["CableTerminationType", strawberry.lazy('dcim.graphql.types')]]: - return self.clusters.all() + return self.cabletermination_set.all() @strawberry_django.field def consoleserverports(self) -> List[Annotated["ConsoleServerPortType", strawberry.lazy('dcim.graphql.types')]]: - return self.clusters.all() + return self.consoleserverports.all() @strawberry_django.field def poweroutlets(self) -> List[Annotated["PowerOutletType", strawberry.lazy('dcim.graphql.types')]]: - return self.clusters.all() + return self.poweroutlets.all() @strawberry_django.field def frontports(self) -> List[Annotated["FrontPortType", strawberry.lazy('dcim.graphql.types')]]: - return self.clusters.all() + return self.frontports.all() @strawberry_django.field def modulebays(self) -> List[Annotated["ModuleBayType", strawberry.lazy('dcim.graphql.types')]]: - return self.clusters.all() + return self.modulebays.all() @strawberry_django.field def services(self) -> List[Annotated["ServiceType", strawberry.lazy('ipam.graphql.types')]]: - return self.clusters.all() + return self.services.all() @strawberry_django.field def inventoryitems(self) -> List[Annotated["InventoryItemType", strawberry.lazy('dcim.graphql.types')]]: - return self.clusters.all() + return self.inventoryitems.all() @strawberry_django.field def vdcs(self) -> List[Annotated["VirtualDeviceContextType", strawberry.lazy('dcim.graphql.types')]]: @@ -310,6 +310,26 @@ class DeviceBayTemplateType(ComponentTemplateObjectType): class InventoryItemTemplateType(ComponentTemplateObjectType): _name: str + @strawberry_django.field + def parent(self) -> List[Annotated["InventoryItemTemplateType", strawberry.lazy('dcim.graphql.types')]]: + return self.parent + + @strawberry_django.field + def child_items(self) -> List[Annotated["InventoryItemTemplateType", strawberry.lazy('dcim.graphql.types')]]: + return self.child_items.all() + + @strawberry_django.field + def component(self) -> List[Annotated[Union[ + Annotated["ConsolePortType", strawberry.lazy('dcim.graphql.types')], + Annotated["ConsoleServerPortType", strawberry.lazy('dcim.graphql.types')], + Annotated["FrontPortType", strawberry.lazy('dcim.graphql.types')], + Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')], + Annotated["PowerOutletType", strawberry.lazy('dcim.graphql.types')], + Annotated["PowerPortType", strawberry.lazy('dcim.graphql.types')], + Annotated["RearPortType", strawberry.lazy('dcim.graphql.types')], + ], strawberry.union("InventoryItemComponentType")]]: + return self.component + @strawberry_django.type( models.DeviceRole, @@ -426,21 +446,36 @@ class FrontPortTemplateType(ComponentTemplateObjectType): filters=InterfaceFilter ) class InterfaceType(IPAddressesMixin, ComponentObjectType, CabledObjectMixin, PathEndpointMixin): + mac_address: str + wwn: str - def resolve_poe_mode(self, info): - return self.poe_mode or None + @strawberry_django.field + def vdcs(self) -> List[Annotated["VirtualDeviceContextType", strawberry.lazy('dcim.graphql.types')]]: + return self.vdcs.all() - def resolve_poe_type(self, info): - return self.poe_type or None + @strawberry_django.field + def tagged_vlans(self) -> List[Annotated["VLANType", strawberry.lazy('ipam.graphql.types')]]: + return self.tagged_vlans.all() - def resolve_mode(self, info): - return self.mode or None + @strawberry_django.field + def bridge_interfaces(self) -> List[Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')]]: + return self.bridge_interfaces.all() - def resolve_rf_role(self, info): - return self.rf_role or None + @strawberry_django.field + def wireless_lans(self) -> List[Annotated["WirelessLANType", strawberry.lazy('wireless.graphql.types')]]: + return self.wireless_lans.all() - def resolve_rf_channel(self, info): - return self.rf_channel or None + @strawberry_django.field + def member_interfaces(self) -> List[Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')]]: + return self.member_interfaces.all() + + @strawberry_django.field + def child_interfaces(self) -> List[Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')]]: + return self.child_interfaces.all() + + @strawberry_django.field + def ip_addresses(self) -> List[Annotated["IPAddressType", strawberry.lazy('ipam.graphql.types')]]: + return self.ip_addresses.all() @strawberry_django.type( @@ -451,14 +486,9 @@ class InterfaceType(IPAddressesMixin, ComponentObjectType, CabledObjectMixin, Pa class InterfaceTemplateType(ComponentTemplateObjectType): _name: str - def resolve_poe_mode(self, info): - return self.poe_mode or None - - def resolve_poe_type(self, info): - return self.poe_type or None - - def resolve_rf_role(self, info): - return self.rf_role or None + @strawberry_django.field + def bridge_interfaces(self) -> List[Annotated["InterfaceTemplateType", strawberry.lazy('dcim.graphql.types')]]: + return self.bridge_interfaces.all() @strawberry_django.type( @@ -472,12 +502,19 @@ class InventoryItemType(ComponentObjectType): @strawberry_django.type( models.InventoryItemRole, - # fields='__all__', - exclude=('color',), # bug - temp + fields='__all__', filters=InventoryItemRoleFilter ) class InventoryItemRoleType(OrganizationalObjectType): - pass + color: str + + @strawberry_django.field + def inventory_items(self) -> List[Annotated["InventoryItemType", strawberry.lazy('dcim.graphql.types')]]: + return self.inventory_items.all() + + @strawberry_django.field + def inventory_item_templates(self) -> List[Annotated["InventoryItemTemplateType", strawberry.lazy('dcim.graphql.types')]]: + return self.inventory_item_templates.all() @strawberry_django.type( diff --git a/netbox/ipam/graphql/types.py b/netbox/ipam/graphql/types.py index 31bd0a9d9..5676ecb16 100644 --- a/netbox/ipam/graphql/types.py +++ b/netbox/ipam/graphql/types.py @@ -97,8 +97,9 @@ class AggregateType(NetBoxObjectType, BaseIPAddressFamilyType): ) class FHRPGroupType(NetBoxObjectType): - def resolve_auth_type(self, info): - return self.auth_type or None + @strawberry_django.field + def fhrpgroupassignment_set(self) -> List[Annotated["FHRPGroupAssignmentType", strawberry.lazy('ipam.graphql.types')]]: + return self.fhrpgroupassignment_set.all() @strawberry_django.type( @@ -123,10 +124,27 @@ class FHRPGroupAssignmentType(BaseObjectType): filters=IPAddressFilter ) class IPAddressType(NetBoxObjectType, BaseIPAddressFamilyType): - # assigned_object = graphene.Field('ipam.graphql.gfk_mixins.IPAddressAssignmentType') + address: str - def resolve_role(self, info): - return self.role or None + @strawberry_django.field + def nat_outside(self) -> Annotated["IPAddressType", strawberry.lazy('ipam.graphql.types')]: + return self.nat_outside + + @strawberry_django.field + def tunnel_terminations(self) -> List[Annotated["TunnelTerminationType", strawberry.lazy('vpn.graphql.types')]]: + return self.tunnel_terminations.all() + + @strawberry_django.field + def services(self) -> List[Annotated["ServiceType", strawberry.lazy('ipam.graphql.types')]]: + return self.services.all() + + @strawberry_django.field + def assigned_object(self) -> Annotated[Union[ + Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')], + Annotated["FHRPGroupType", strawberry.lazy('ipam.graphql.types')], + Annotated["VMInterfaceType", strawberry.lazy('virtualization.graphql.types')], + ], strawberry.union("IPAddressAssignmentType")]: + return self.assigned_object @strawberry_django.type( @@ -136,9 +154,8 @@ class IPAddressType(NetBoxObjectType, BaseIPAddressFamilyType): filters=IPRangeFilter ) class IPRangeType(NetBoxObjectType): - - def resolve_role(self, info): - return self.role or None + start_address: str + end_address: str @strawberry_django.type( diff --git a/netbox/vpn/graphql/types.py b/netbox/vpn/graphql/types.py index 68fe39403..2e57fe4bf 100644 --- a/netbox/vpn/graphql/types.py +++ b/netbox/vpn/graphql/types.py @@ -55,7 +55,10 @@ class TunnelType(NetBoxObjectType): filters=IKEProposalFilter ) class IKEProposalType(OrganizationalObjectType): - pass + + @strawberry_django.field + def ike_policies(self) -> List[Annotated["IKEPolicyType", strawberry.lazy('vpn.graphql.types')]]: + return self.ike_policies.all() @strawberry_django.type( @@ -80,7 +83,10 @@ class IKEPolicyType(OrganizationalObjectType): filters=IPSecProposalFilter ) class IPSecProposalType(OrganizationalObjectType): - pass + + @strawberry_django.field + def ipsec_policies(self) -> List[Annotated["IPSecPolicyType", strawberry.lazy('vpn.graphql.types')]]: + return self.ipsec_policies.all() @strawberry_django.type( @@ -89,7 +95,14 @@ class IPSecProposalType(OrganizationalObjectType): filters=IPSecPolicyFilter ) class IPSecPolicyType(OrganizationalObjectType): - pass + + @strawberry_django.field + def proposals(self) -> List[Annotated["IKEProposalType", strawberry.lazy('vpn.graphql.types')]]: + return self.proposals.all() + + @strawberry_django.field + def ipsec_profiles(self) -> List[Annotated["IPSecProposalType", strawberry.lazy('vpn.graphql.types')]]: + return self.ipsec_profiles.all() @strawberry_django.type( @@ -98,7 +111,10 @@ class IPSecPolicyType(OrganizationalObjectType): filters=IPSecProfileFilter ) class IPSecProfileType(OrganizationalObjectType): - pass + + @strawberry_django.field + def tunnels(self) -> List[Annotated["TunnelType", strawberry.lazy('vpn.graphql.types')]]: + return self.tunnels.all() @strawberry_django.type(