1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

9856 ipam and tenant schema

This commit is contained in:
Arthur
2024-02-07 15:43:29 -08:00
parent ed1e1ae939
commit d3fc026b5d
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 netbox.graphql.fields import ObjectField, ObjectListField
from utilities.graphql_optimizer import gql_query_optimizer
from .types import *
class IPAMQuery(graphene.ObjectType):
asn = ObjectField(ASNType)
asn_list = ObjectListField(ASNType)
@strawberry.type
class IPAMQuery:
asn: ASNType = strawberry_django.field()
asn_list: List[ASNType] = strawberry_django.field()
def resolve_asn_list(root, info, **kwargs):
return gql_query_optimizer(models.ASN.objects.all(), info)
asn_range: ASNRangeType = strawberry_django.field()
asn_range_list: List[ASNRangeType] = strawberry_django.field()
asn_range = ObjectField(ASNRangeType)
asn_range_list = ObjectListField(ASNRangeType)
aggregate: AggregateType = strawberry_django.field()
aggregate_list: List[AggregateType] = strawberry_django.field()
def resolve_asn_range_list(root, info, **kwargs):
return gql_query_optimizer(models.ASNRange.objects.all(), info)
ip_address: IPAddressType = strawberry_django.field()
ip_address_list: List[IPAddressType] = strawberry_django.field()
aggregate = ObjectField(AggregateType)
aggregate_list = ObjectListField(AggregateType)
ip_range: IPRangeType = strawberry_django.field()
ip_range_list: List[IPRangeType] = strawberry_django.field()
def resolve_aggregate_list(root, info, **kwargs):
return gql_query_optimizer(models.Aggregate.objects.all(), info)
prefix: PrefixType = strawberry_django.field()
prefix_list: List[PrefixType] = strawberry_django.field()
ip_address = ObjectField(IPAddressType)
ip_address_list = ObjectListField(IPAddressType)
rir: RIRType = strawberry_django.field()
rir_list: List[RIRType] = strawberry_django.field()
def resolve_ip_address_list(root, info, **kwargs):
return gql_query_optimizer(models.IPAddress.objects.all(), info)
role: RoleType = strawberry_django.field()
role_list: List[RoleType] = strawberry_django.field()
ip_range = ObjectField(IPRangeType)
ip_range_list = ObjectListField(IPRangeType)
route_target: RouteTargetType = strawberry_django.field()
route_target_list: List[RouteTargetType] = strawberry_django.field()
def resolve_ip_range_list(root, info, **kwargs):
return gql_query_optimizer(models.IPRange.objects.all(), info)
service: ServiceType = strawberry_django.field()
service_list: List[ServiceType] = strawberry_django.field()
prefix = ObjectField(PrefixType)
prefix_list = ObjectListField(PrefixType)
service_template: ServiceTemplateType = strawberry_django.field()
service_template_list: List[ServiceTemplateType] = strawberry_django.field()
def resolve_prefix_list(root, info, **kwargs):
return gql_query_optimizer(models.Prefix.objects.all(), info)
fhrp_group: FHRPGroupType = strawberry_django.field()
fhrp_group_list: List[FHRPGroupType] = strawberry_django.field()
rir = ObjectField(RIRType)
rir_list = ObjectListField(RIRType)
fhrp_group_assignment: FHRPGroupAssignmentType = strawberry_django.field()
fhrp_group_assignment_list: List[FHRPGroupAssignmentType] = strawberry_django.field()
def resolve_rir_list(root, info, **kwargs):
return gql_query_optimizer(models.RIR.objects.all(), info)
vlan: VLANType = strawberry_django.field()
vlan_list: List[VLANType] = strawberry_django.field()
role = ObjectField(RoleType)
role_list = ObjectListField(RoleType)
vlan_group: VLANGroupType = strawberry_django.field()
vlan_group_list: List[VLANGroupType] = strawberry_django.field()
def resolve_role_list(root, info, **kwargs):
return gql_query_optimizer(models.Role.objects.all(), info)
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)
vrf: VRFType = strawberry_django.field()
vrf_list: List[VRFType] = strawberry_django.field()

View File

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

View File

@ -1,10 +1,14 @@
import strawberry
from strawberry_django.optimizer import DjangoOptimizerExtension
from strawberry.schema.config import StrawberryConfig
from circuits.graphql.schema import CircuitsQuery
from core.graphql.schema import CoreQuery
from dcim.graphql.schema import DCIMQuery
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 virtualization.graphql.schema import VirtualizationQuery
# from vpn.graphql.schema import VPNQuery
@ -18,13 +22,12 @@ class Query(
CoreQuery,
DCIMQuery,
ExtrasQuery,
# IPAMQuery,
# TenancyQuery,
IPAMQuery,
TenancyQuery,
# VirtualizationQuery,
# VPNQuery,
# WirelessQuery,
# *registry['plugins']['graphql_schemas'], # Append plugin schemas
# graphene.ObjectType
*registry['plugins']['graphql_schemas'], # Append plugin schemas
):
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 tenancy import models
from circuits import models
from .types import *
from utilities.graphql_optimizer import gql_query_optimizer
class TenancyQuery(graphene.ObjectType):
tenant = ObjectField(TenantType)
tenant_list = ObjectListField(TenantType)
@strawberry.type
class TenancyQuery:
tenant: TenantType = strawberry_django.field()
tenant_list: List[TenantType] = strawberry_django.field()
def resolve_tenant_list(root, info, **kwargs):
return gql_query_optimizer(models.Tenant.objects.all(), info)
tenant_group: TenantGroupType = strawberry_django.field()
tenant_group_list: List[TenantGroupType] = strawberry_django.field()
tenant_group = ObjectField(TenantGroupType)
tenant_group_list = ObjectListField(TenantGroupType)
contact: ContactType = strawberry_django.field()
contact_list: List[ContactType] = strawberry_django.field()
def resolve_tenant_group_list(root, info, **kwargs):
return gql_query_optimizer(models.TenantGroup.objects.all(), info)
contact_role: ContactRoleType = strawberry_django.field()
contact_role_list: List[ContactRoleType] = strawberry_django.field()
contact = ObjectField(ContactType)
contact_list = ObjectListField(ContactType)
contact_group: ContactGroupType = strawberry_django.field()
contact_group_list: List[ContactGroupType] = strawberry_django.field()
def resolve_contact_list(root, info, **kwargs):
return gql_query_optimizer(models.Contact.objects.all(), info)
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)
contact_assignment: ContactAssignmentType = strawberry_django.field()
contact_assignment_list: List[ContactAssignmentType] = strawberry_django.field()

View File

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