9856 ipam and tenant schema

This commit is contained in:
Arthur 2024-02-07 15:43:29 -08:00
parent 1777ecaa5c
commit 4f7e744b6d
7 changed files with 239 additions and 141 deletions

View File

@ -0,0 +1,105 @@
import strawberry
import strawberry_django
from strawberry import auto
from ipam import models, filtersets
from netbox.graphql import filters
__all__ = (
'ASNFilter',
'ASNRangeFilter',
'AggregateFilter',
'FHRPGroupFilter',
'FHRPGroupAssignmentFilter',
'IPAddressFilter',
'IPRangeFilter',
'PrefixFilter',
'RIRFilter',
'RoleFilter',
'RouteTargetFilter',
'ServiceFilter',
'ServiceTemplateFilter',
'VLANFilter',
'VLANGroupFilter',
'VRFFilter',
)
@strawberry_django.filter(models.ASN, lookups=True)
class ASNFilter(filtersets.ASNFilterSet):
id: auto
@strawberry_django.filter(models.ASNRange, lookups=True)
class ASNRangeFilter(filtersets.ASNRangeFilterSet):
id: auto
@strawberry_django.filter(models.Aggregate, lookups=True)
class AggregateFilter(filtersets.AggregateFilterSet):
id: auto
@strawberry_django.filter(models.FHRPGroup, lookups=True)
class FHRPGroupFilter(filtersets.FHRPGroupFilterSet):
id: auto
@strawberry_django.filter(models.FHRPGroupAssignment, lookups=True)
class FHRPGroupAssignmentFilter(filtersets.FHRPGroupAssignmentFilterSet):
id: auto
@strawberry_django.filter(models.IPAddress, lookups=True)
class IPAddressFilter(filtersets.IPAddressFilterSet):
id: auto
@strawberry_django.filter(models.IPRange, lookups=True)
class IPRangeFilter(filtersets.IPRangeFilterSet):
id: auto
@strawberry_django.filter(models.Prefix, lookups=True)
class PrefixFilter(filtersets.PrefixFilterSet):
id: auto
@strawberry_django.filter(models.RIR, lookups=True)
class RIRFilter(filtersets.RIRFilterSet):
id: auto
@strawberry_django.filter(models.Role, lookups=True)
class RoleFilter(filtersets.RoleFilterSet):
id: auto
@strawberry_django.filter(models.RouteTarget, lookups=True)
class RouteTargetFilter(filtersets.RouteTargetFilterSet):
id: auto
@strawberry_django.filter(models.Service, lookups=True)
class ServiceFilter(filtersets.ServiceFilterSet):
id: auto
@strawberry_django.filter(models.ServiceTemplate, lookups=True)
class ServiceTemplateFilter(filtersets.ServiceTemplateFilterSet):
id: auto
@strawberry_django.filter(models.VLAN, lookups=True)
class VLANFilter(filtersets.VLANFilterSet):
id: auto
@strawberry_django.filter(models.VLANGroup, lookups=True)
class VLANGroupFilter(filtersets.VLANGroupFilterSet):
id: auto
@strawberry_django.filter(models.VRF, lookups=True)
class VRFFilter(filtersets.VRFFilterSet):
id: auto

View File

@ -1,104 +1,57 @@
import graphene from typing import List
import strawberry
import strawberry_django
from ipam import models from ipam import models
from netbox.graphql.fields import ObjectField, ObjectListField
from utilities.graphql_optimizer import gql_query_optimizer
from .types import * from .types import *
class IPAMQuery(graphene.ObjectType): @strawberry.type
asn = ObjectField(ASNType) class IPAMQuery:
asn_list = ObjectListField(ASNType) asn: ASNType = strawberry_django.field()
asn_list: List[ASNType] = strawberry_django.field()
def resolve_asn_list(root, info, **kwargs): asn_range: ASNRangeType = strawberry_django.field()
return gql_query_optimizer(models.ASN.objects.all(), info) asn_range_list: List[ASNRangeType] = strawberry_django.field()
asn_range = ObjectField(ASNRangeType) aggregate: AggregateType = strawberry_django.field()
asn_range_list = ObjectListField(ASNRangeType) aggregate_list: List[AggregateType] = strawberry_django.field()
def resolve_asn_range_list(root, info, **kwargs): ip_address: IPAddressType = strawberry_django.field()
return gql_query_optimizer(models.ASNRange.objects.all(), info) ip_address_list: List[IPAddressType] = strawberry_django.field()
aggregate = ObjectField(AggregateType) ip_range: IPRangeType = strawberry_django.field()
aggregate_list = ObjectListField(AggregateType) ip_range_list: List[IPRangeType] = strawberry_django.field()
def resolve_aggregate_list(root, info, **kwargs): prefix: PrefixType = strawberry_django.field()
return gql_query_optimizer(models.Aggregate.objects.all(), info) prefix_list: List[PrefixType] = strawberry_django.field()
ip_address = ObjectField(IPAddressType) rir: RIRType = strawberry_django.field()
ip_address_list = ObjectListField(IPAddressType) rir_list: List[RIRType] = strawberry_django.field()
def resolve_ip_address_list(root, info, **kwargs): role: RoleType = strawberry_django.field()
return gql_query_optimizer(models.IPAddress.objects.all(), info) role_list: List[RoleType] = strawberry_django.field()
ip_range = ObjectField(IPRangeType) route_target: RouteTargetType = strawberry_django.field()
ip_range_list = ObjectListField(IPRangeType) route_target_list: List[RouteTargetType] = strawberry_django.field()
def resolve_ip_range_list(root, info, **kwargs): service: ServiceType = strawberry_django.field()
return gql_query_optimizer(models.IPRange.objects.all(), info) service_list: List[ServiceType] = strawberry_django.field()
prefix = ObjectField(PrefixType) service_template: ServiceTemplateType = strawberry_django.field()
prefix_list = ObjectListField(PrefixType) service_template_list: List[ServiceTemplateType] = strawberry_django.field()
def resolve_prefix_list(root, info, **kwargs): fhrp_group: FHRPGroupType = strawberry_django.field()
return gql_query_optimizer(models.Prefix.objects.all(), info) fhrp_group_list: List[FHRPGroupType] = strawberry_django.field()
rir = ObjectField(RIRType) fhrp_group_assignment: FHRPGroupAssignmentType = strawberry_django.field()
rir_list = ObjectListField(RIRType) fhrp_group_assignment_list: List[FHRPGroupAssignmentType] = strawberry_django.field()
def resolve_rir_list(root, info, **kwargs): vlan: VLANType = strawberry_django.field()
return gql_query_optimizer(models.RIR.objects.all(), info) vlan_list: List[VLANType] = strawberry_django.field()
role = ObjectField(RoleType) vlan_group: VLANGroupType = strawberry_django.field()
role_list = ObjectListField(RoleType) vlan_group_list: List[VLANGroupType] = strawberry_django.field()
def resolve_role_list(root, info, **kwargs): vrf: VRFType = strawberry_django.field()
return gql_query_optimizer(models.Role.objects.all(), info) vrf_list: List[VRFType] = strawberry_django.field()
route_target = ObjectField(RouteTargetType)
route_target_list = ObjectListField(RouteTargetType)
def resolve_route_target_list(root, info, **kwargs):
return gql_query_optimizer(models.RouteTarget.objects.all(), info)
service = ObjectField(ServiceType)
service_list = ObjectListField(ServiceType)
def resolve_service_list(root, info, **kwargs):
return gql_query_optimizer(models.Service.objects.all(), info)
service_template = ObjectField(ServiceTemplateType)
service_template_list = ObjectListField(ServiceTemplateType)
def resolve_service_template_list(root, info, **kwargs):
return gql_query_optimizer(models.ServiceTemplate.objects.all(), info)
fhrp_group = ObjectField(FHRPGroupType)
fhrp_group_list = ObjectListField(FHRPGroupType)
def resolve_fhrp_group_list(root, info, **kwargs):
return gql_query_optimizer(models.FHRPGroup.objects.all(), info)
fhrp_group_assignment = ObjectField(FHRPGroupAssignmentType)
fhrp_group_assignment_list = ObjectListField(FHRPGroupAssignmentType)
def resolve_fhrp_group_assignment_list(root, info, **kwargs):
return gql_query_optimizer(models.FHRPGroupAssignment.objects.all(), info)
vlan = ObjectField(VLANType)
vlan_list = ObjectListField(VLANType)
def resolve_vlan_list(root, info, **kwargs):
return gql_query_optimizer(models.VLAN.objects.all(), info)
vlan_group = ObjectField(VLANGroupType)
vlan_group_list = ObjectListField(VLANGroupType)
def resolve_vlan_group_list(root, info, **kwargs):
return gql_query_optimizer(models.VLANGroup.objects.all(), info)
vrf = ObjectField(VRFType)
vrf_list = ObjectListField(VRFType)
def resolve_vrf_list(root, info, **kwargs):
return gql_query_optimizer(models.VRF.objects.all(), info)

View File

@ -26,7 +26,7 @@ __all__ = (
) )
class IPAddressFamilyType(graphene.ObjectType): class IPAddressFamilyType:
# value = graphene.Int() # value = graphene.Int()
# label = graphene.String() # label = graphene.String()
@ -50,8 +50,9 @@ class BaseIPAddressFamilyType:
@strawberry_django.type( @strawberry_django.type(
models.ASN, models.ASN,
fields='__all__', # fields='__all__',
filters=ProviderFilter exclude=('asn',), # bug - temp
filters=ASNFilter
) )
class ASNType(NetBoxObjectType): class ASNType(NetBoxObjectType):
# asn = graphene.Field(BigInt) # asn = graphene.Field(BigInt)
@ -60,7 +61,8 @@ class ASNType(NetBoxObjectType):
@strawberry_django.type( @strawberry_django.type(
models.ASNRange, models.ASNRange,
fields='__all__', # fields='__all__',
exclude=('start', 'end',), # bug - temp
filters=ASNRangeFilter filters=ASNRangeFilter
) )
class ASNRangeType(NetBoxObjectType): class ASNRangeType(NetBoxObjectType):
@ -69,7 +71,8 @@ class ASNRangeType(NetBoxObjectType):
@strawberry_django.type( @strawberry_django.type(
models.Aggregate, models.Aggregate,
fields='__all__', # fields='__all__',
exclude=('prefix',), # bug - temp
filters=AggregateFilter filters=AggregateFilter
) )
class AggregateType(NetBoxObjectType, BaseIPAddressFamilyType): class AggregateType(NetBoxObjectType, BaseIPAddressFamilyType):
@ -99,7 +102,7 @@ class FHRPGroupAssignmentType(BaseObjectType):
@strawberry_django.type( @strawberry_django.type(
models.IPAddress, models.IPAddress,
exclude=('assigned_object_type', 'assigned_object_id'), exclude=('assigned_object_type', 'assigned_object_id', 'address'),
filters=IPAddressFilter filters=IPAddressFilter
) )
class IPAddressType(NetBoxObjectType, BaseIPAddressFamilyType): class IPAddressType(NetBoxObjectType, BaseIPAddressFamilyType):
@ -111,7 +114,8 @@ class IPAddressType(NetBoxObjectType, BaseIPAddressFamilyType):
@strawberry_django.type( @strawberry_django.type(
models.IPRange, models.IPRange,
fields='__all__', # fields='__all__',
exclude=('start_address', 'end_address',), # bug - temp
filters=IPRangeFilter filters=IPRangeFilter
) )
class IPRangeType(NetBoxObjectType): class IPRangeType(NetBoxObjectType):
@ -122,7 +126,8 @@ class IPRangeType(NetBoxObjectType):
@strawberry_django.type( @strawberry_django.type(
models.Prefix, models.Prefix,
fields='__all__', # fields='__all__',
exclude=('prefix',), # bug - temp
filters=PrefixFilter filters=PrefixFilter
) )
class PrefixType(NetBoxObjectType, BaseIPAddressFamilyType): class PrefixType(NetBoxObjectType, BaseIPAddressFamilyType):
@ -158,7 +163,8 @@ class RouteTargetType(NetBoxObjectType):
@strawberry_django.type( @strawberry_django.type(
models.Service, models.Service,
fields='__all__', # fields='__all__',
exclude=('ports',), # bug - temp
filters=ServiceFilter filters=ServiceFilter
) )
class ServiceType(NetBoxObjectType): class ServiceType(NetBoxObjectType):
@ -167,7 +173,8 @@ class ServiceType(NetBoxObjectType):
@strawberry_django.type( @strawberry_django.type(
models.ServiceTemplate, models.ServiceTemplate,
fields='__all__', # fields='__all__',
exclude=('ports',), # bug - temp
filters=ServiceTemplateFilter filters=ServiceTemplateFilter
) )
class ServiceTemplateType(NetBoxObjectType): class ServiceTemplateType(NetBoxObjectType):

View File

@ -1,10 +1,14 @@
import strawberry import strawberry
from strawberry_django.optimizer import DjangoOptimizerExtension from strawberry_django.optimizer import DjangoOptimizerExtension
from strawberry.schema.config import StrawberryConfig from strawberry.schema.config import StrawberryConfig
from circuits.graphql.schema import CircuitsQuery from circuits.graphql.schema import CircuitsQuery
from core.graphql.schema import CoreQuery from core.graphql.schema import CoreQuery
from dcim.graphql.schema import DCIMQuery from dcim.graphql.schema import DCIMQuery
from extras.graphql.schema import ExtrasQuery from extras.graphql.schema import ExtrasQuery
from ipam.graphql.schema import IPAMQuery
from netbox.registry import registry
from tenancy.graphql.schema import TenancyQuery
from users.graphql.schema import UsersQuery from users.graphql.schema import UsersQuery
# from virtualization.graphql.schema import VirtualizationQuery # from virtualization.graphql.schema import VirtualizationQuery
# from vpn.graphql.schema import VPNQuery # from vpn.graphql.schema import VPNQuery
@ -18,13 +22,12 @@ class Query(
CoreQuery, CoreQuery,
DCIMQuery, DCIMQuery,
ExtrasQuery, ExtrasQuery,
# IPAMQuery, IPAMQuery,
# TenancyQuery, TenancyQuery,
# VirtualizationQuery, # VirtualizationQuery,
# VPNQuery, # VPNQuery,
# WirelessQuery, # WirelessQuery,
# *registry['plugins']['graphql_schemas'], # Append plugin schemas *registry['plugins']['graphql_schemas'], # Append plugin schemas
# graphene.ObjectType
): ):
pass pass

View File

@ -0,0 +1,45 @@
import strawberry
import strawberry_django
from strawberry import auto
from tenancy import models, filtersets
from netbox.graphql import filters
__all__ = (
'TenantFilter',
'TenantGroupFilter',
'ContactFilter',
'ContactRoleFilter',
'ContactGroupFilter',
'ContactAssignmentFilter',
)
@strawberry_django.filter(models.Tenant, lookups=True)
class TenantFilter(filtersets.TenantFilterSet):
id: auto
@strawberry_django.filter(models.TenantGroup, lookups=True)
class TenantGroupFilter(filtersets.TenantGroupFilterSet):
id: auto
@strawberry_django.filter(models.Contact, lookups=True)
class ContactFilter(filtersets.ContactFilterSet):
id: auto
@strawberry_django.filter(models.ContactRole, lookups=True)
class ContactRoleFilter(filtersets.ContactRoleFilterSet):
id: auto
@strawberry_django.filter(models.ContactGroup, lookups=True)
class ContactGroupFilter(filtersets.ContactGroupFilterSet):
id: auto
@strawberry_django.filter(models.ContactAssignment, lookups=True)
class ContactAssignmentFilter(filtersets.ContactAssignmentFilterSet):
id: auto

View File

@ -1,44 +1,27 @@
import graphene from typing import List
import strawberry
import strawberry_django
from netbox.graphql.fields import ObjectField, ObjectListField from circuits import models
from tenancy import models
from .types import * from .types import *
from utilities.graphql_optimizer import gql_query_optimizer
class TenancyQuery(graphene.ObjectType): @strawberry.type
tenant = ObjectField(TenantType) class TenancyQuery:
tenant_list = ObjectListField(TenantType) tenant: TenantType = strawberry_django.field()
tenant_list: List[TenantType] = strawberry_django.field()
def resolve_tenant_list(root, info, **kwargs): tenant_group: TenantGroupType = strawberry_django.field()
return gql_query_optimizer(models.Tenant.objects.all(), info) tenant_group_list: List[TenantGroupType] = strawberry_django.field()
tenant_group = ObjectField(TenantGroupType) contact: ContactType = strawberry_django.field()
tenant_group_list = ObjectListField(TenantGroupType) contact_list: List[ContactType] = strawberry_django.field()
def resolve_tenant_group_list(root, info, **kwargs): contact_role: ContactRoleType = strawberry_django.field()
return gql_query_optimizer(models.TenantGroup.objects.all(), info) contact_role_list: List[ContactRoleType] = strawberry_django.field()
contact = ObjectField(ContactType) contact_group: ContactGroupType = strawberry_django.field()
contact_list = ObjectListField(ContactType) contact_group_list: List[ContactGroupType] = strawberry_django.field()
def resolve_contact_list(root, info, **kwargs): contact_assignment: ContactAssignmentType = strawberry_django.field()
return gql_query_optimizer(models.Contact.objects.all(), info) contact_assignment_list: List[ContactAssignmentType] = strawberry_django.field()
contact_role = ObjectField(ContactRoleType)
contact_role_list = ObjectListField(ContactRoleType)
def resolve_contact_role_list(root, info, **kwargs):
return gql_query_optimizer(models.ContactRole.objects.all(), info)
contact_group = ObjectField(ContactGroupType)
contact_group_list = ObjectListField(ContactGroupType)
def resolve_contact_group_list(root, info, **kwargs):
return gql_query_optimizer(models.ContactGroup.objects.all(), info)
contact_assignment = ObjectField(ContactAssignmentType)
contact_assignment_list = ObjectListField(ContactAssignmentType)
def resolve_contact_assignment_list(root, info, **kwargs):
return gql_query_optimizer(models.ContactAssignment.objects.all(), info)

View File

@ -30,7 +30,7 @@ class ContactAssignmentsMixin:
@strawberry_django.type( @strawberry_django.type(
models.Tenant, models.Tenant,
fields='__all__', fields='__all__',
# filters=TenantFilter filters=TenantFilter
) )
class TenantType(NetBoxObjectType): class TenantType(NetBoxObjectType):
pass pass
@ -38,8 +38,9 @@ class TenantType(NetBoxObjectType):
@strawberry_django.type( @strawberry_django.type(
models.TenantGroup, models.TenantGroup,
fields='__all__', # fields='__all__',
# filters=TenantGroupFilter exclude=('parent',), # bug - temp
filters=TenantGroupFilter
) )
class TenantGroupType(OrganizationalObjectType): class TenantGroupType(OrganizationalObjectType):
pass pass
@ -52,7 +53,7 @@ class TenantGroupType(OrganizationalObjectType):
@strawberry_django.type( @strawberry_django.type(
models.Contact, models.Contact,
fields='__all__', fields='__all__',
# filters=ContactFilter filters=ContactFilter
) )
class ContactType(ContactAssignmentsMixin, NetBoxObjectType): class ContactType(ContactAssignmentsMixin, NetBoxObjectType):
pass pass
@ -61,7 +62,7 @@ class ContactType(ContactAssignmentsMixin, NetBoxObjectType):
@strawberry_django.type( @strawberry_django.type(
models.ContactRole, models.ContactRole,
fields='__all__', fields='__all__',
# filters=ContactRoleFilter filters=ContactRoleFilter
) )
class ContactRoleType(ContactAssignmentsMixin, OrganizationalObjectType): class ContactRoleType(ContactAssignmentsMixin, OrganizationalObjectType):
pass pass
@ -69,8 +70,9 @@ class ContactRoleType(ContactAssignmentsMixin, OrganizationalObjectType):
@strawberry_django.type( @strawberry_django.type(
models.ContactGroup, models.ContactGroup,
fields='__all__', # fields='__all__',
# filters=ContactGroupFilter exclude=('parent',), # bug - temp
filters=ContactGroupFilter
) )
class ContactGroupType(OrganizationalObjectType): class ContactGroupType(OrganizationalObjectType):
pass pass
@ -79,7 +81,7 @@ class ContactGroupType(OrganizationalObjectType):
@strawberry_django.type( @strawberry_django.type(
models.ContactAssignment, models.ContactAssignment,
fields='__all__', fields='__all__',
# filters=ContactAssignmentFilter filters=ContactAssignmentFilter
) )
class ContactAssignmentType(CustomFieldsMixin, TagsMixin, BaseObjectType): class ContactAssignmentType(CustomFieldsMixin, TagsMixin, BaseObjectType):
pass pass