types.py 4.4 KB

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