types.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. import graphene
  2. from ipam import filtersets, models
  3. from .mixins import IPAddressesMixin
  4. from netbox.graphql.scalars import BigInt
  5. from netbox.graphql.types import BaseObjectType, OrganizationalObjectType, NetBoxObjectType
  6. __all__ = (
  7. 'ASNType',
  8. 'ASNRangeType',
  9. 'AggregateType',
  10. 'FHRPGroupType',
  11. 'FHRPGroupAssignmentType',
  12. 'IPAddressType',
  13. 'IPRangeType',
  14. 'PrefixType',
  15. 'RIRType',
  16. 'RoleType',
  17. 'RouteTargetType',
  18. 'ServiceType',
  19. 'ServiceTemplateType',
  20. 'VLANType',
  21. 'VLANGroupType',
  22. 'VRFType',
  23. )
  24. class IPAddressFamilyType(graphene.ObjectType):
  25. value = graphene.Int()
  26. label = graphene.String()
  27. def __init__(self, value):
  28. self.value = value
  29. self.label = f'IPv{value}'
  30. class BaseIPAddressFamilyType:
  31. """
  32. Base type for models that need to expose their IPAddress family type.
  33. """
  34. family = graphene.Field(IPAddressFamilyType)
  35. def resolve_family(self, _):
  36. # Note that self, is an instance of models.IPAddress
  37. # thus resolves to the address family value.
  38. return IPAddressFamilyType(self.family)
  39. class ASNType(NetBoxObjectType):
  40. asn = graphene.Field(BigInt)
  41. class Meta:
  42. model = models.ASN
  43. fields = '__all__'
  44. filterset_class = filtersets.ASNFilterSet
  45. class ASNRangeType(NetBoxObjectType):
  46. class Meta:
  47. model = models.ASNRange
  48. fields = '__all__'
  49. filterset_class = filtersets.ASNRangeFilterSet
  50. class AggregateType(NetBoxObjectType, BaseIPAddressFamilyType):
  51. class Meta:
  52. model = models.Aggregate
  53. fields = '__all__'
  54. filterset_class = filtersets.AggregateFilterSet
  55. class FHRPGroupType(NetBoxObjectType, IPAddressesMixin):
  56. class Meta:
  57. model = models.FHRPGroup
  58. fields = '__all__'
  59. filterset_class = filtersets.FHRPGroupFilterSet
  60. def resolve_auth_type(self, info):
  61. return self.auth_type or None
  62. class FHRPGroupAssignmentType(BaseObjectType):
  63. interface = graphene.Field('ipam.graphql.gfk_mixins.FHRPGroupInterfaceType')
  64. class Meta:
  65. model = models.FHRPGroupAssignment
  66. exclude = ('interface_type', 'interface_id')
  67. filterset_class = filtersets.FHRPGroupAssignmentFilterSet
  68. class IPAddressType(NetBoxObjectType, BaseIPAddressFamilyType):
  69. assigned_object = graphene.Field('ipam.graphql.gfk_mixins.IPAddressAssignmentType')
  70. class Meta:
  71. model = models.IPAddress
  72. exclude = ('assigned_object_type', 'assigned_object_id')
  73. filterset_class = filtersets.IPAddressFilterSet
  74. def resolve_role(self, info):
  75. return self.role or None
  76. class IPRangeType(NetBoxObjectType):
  77. class Meta:
  78. model = models.IPRange
  79. fields = '__all__'
  80. filterset_class = filtersets.IPRangeFilterSet
  81. def resolve_role(self, info):
  82. return self.role or None
  83. class PrefixType(NetBoxObjectType, BaseIPAddressFamilyType):
  84. class Meta:
  85. model = models.Prefix
  86. fields = '__all__'
  87. filterset_class = filtersets.PrefixFilterSet
  88. class RIRType(OrganizationalObjectType):
  89. class Meta:
  90. model = models.RIR
  91. fields = '__all__'
  92. filterset_class = filtersets.RIRFilterSet
  93. class RoleType(OrganizationalObjectType):
  94. class Meta:
  95. model = models.Role
  96. fields = '__all__'
  97. filterset_class = filtersets.RoleFilterSet
  98. class RouteTargetType(NetBoxObjectType):
  99. class Meta:
  100. model = models.RouteTarget
  101. fields = '__all__'
  102. filterset_class = filtersets.RouteTargetFilterSet
  103. class ServiceType(NetBoxObjectType):
  104. class Meta:
  105. model = models.Service
  106. fields = '__all__'
  107. filterset_class = filtersets.ServiceFilterSet
  108. class ServiceTemplateType(NetBoxObjectType):
  109. class Meta:
  110. model = models.ServiceTemplate
  111. fields = '__all__'
  112. filterset_class = filtersets.ServiceTemplateFilterSet
  113. class VLANType(NetBoxObjectType):
  114. class Meta:
  115. model = models.VLAN
  116. fields = '__all__'
  117. filterset_class = filtersets.VLANFilterSet
  118. class VLANGroupType(OrganizationalObjectType):
  119. scope = graphene.Field('ipam.graphql.gfk_mixins.VLANGroupScopeType')
  120. class Meta:
  121. model = models.VLANGroup
  122. exclude = ('scope_type', 'scope_id')
  123. filterset_class = filtersets.VLANGroupFilterSet
  124. class VRFType(NetBoxObjectType):
  125. class Meta:
  126. model = models.VRF
  127. fields = '__all__'
  128. filterset_class = filtersets.VRFFilterSet