filters.py 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. from typing import Annotated, TYPE_CHECKING
  2. import strawberry
  3. import strawberry_django
  4. from strawberry.scalars import ID
  5. from strawberry_django import BaseFilterLookup, FilterLookup
  6. from dcim.graphql.filter_mixins import InterfaceBaseFilterMixin, RenderConfigFilterMixin, ScopedFilterMixin
  7. from extras.graphql.filter_mixins import ConfigContextFilterMixin
  8. from netbox.graphql.filter_mixins import (
  9. ImageAttachmentFilterMixin,
  10. OrganizationalModelFilterMixin,
  11. PrimaryModelFilterMixin,
  12. )
  13. from tenancy.graphql.filter_mixins import ContactFilterMixin, TenancyFilterMixin
  14. from virtualization import models
  15. from virtualization.graphql.filter_mixins import VMComponentFilterMixin
  16. if TYPE_CHECKING:
  17. from .enums import *
  18. from netbox.graphql.filter_lookups import FloatLookup, IntegerLookup
  19. from dcim.graphql.filters import DeviceFilter, DeviceRoleFilter, MACAddressFilter, PlatformFilter, SiteFilter
  20. from ipam.graphql.filters import (
  21. FHRPGroupAssignmentFilter,
  22. IPAddressFilter,
  23. ServiceFilter,
  24. VLANGroupFilter,
  25. VRFFilter,
  26. )
  27. from vpn.graphql.filters import L2VPNFilter, TunnelTerminationFilter
  28. __all__ = (
  29. 'ClusterFilter',
  30. 'ClusterGroupFilter',
  31. 'ClusterTypeFilter',
  32. 'VirtualMachineFilter',
  33. 'VMInterfaceFilter',
  34. 'VirtualDiskFilter',
  35. )
  36. @strawberry_django.filter_type(models.Cluster, lookups=True)
  37. class ClusterFilter(ContactFilterMixin, ScopedFilterMixin, TenancyFilterMixin, PrimaryModelFilterMixin):
  38. name: FilterLookup[str] | None = strawberry_django.filter_field()
  39. type: Annotated['ClusterTypeFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
  40. strawberry_django.filter_field()
  41. )
  42. type_id: ID | None = strawberry_django.filter_field()
  43. group: Annotated['ClusterGroupFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
  44. strawberry_django.filter_field()
  45. )
  46. group_id: ID | None = strawberry_django.filter_field()
  47. status: BaseFilterLookup[Annotated['ClusterStatusEnum', strawberry.lazy('virtualization.graphql.enums')]] | None = (
  48. strawberry_django.filter_field()
  49. )
  50. vlan_groups: Annotated['VLANGroupFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  51. strawberry_django.filter_field()
  52. )
  53. @strawberry_django.filter_type(models.ClusterGroup, lookups=True)
  54. class ClusterGroupFilter(ContactFilterMixin, OrganizationalModelFilterMixin):
  55. vlan_groups: Annotated['VLANGroupFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  56. strawberry_django.filter_field()
  57. )
  58. @strawberry_django.filter_type(models.ClusterType, lookups=True)
  59. class ClusterTypeFilter(OrganizationalModelFilterMixin):
  60. pass
  61. @strawberry_django.filter_type(models.VirtualMachine, lookups=True)
  62. class VirtualMachineFilter(
  63. ContactFilterMixin,
  64. ImageAttachmentFilterMixin,
  65. RenderConfigFilterMixin,
  66. ConfigContextFilterMixin,
  67. TenancyFilterMixin,
  68. PrimaryModelFilterMixin,
  69. ):
  70. name: FilterLookup[str] | None = strawberry_django.filter_field()
  71. site: Annotated['SiteFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  72. site_id: ID | None = strawberry_django.filter_field()
  73. cluster: Annotated['ClusterFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
  74. strawberry_django.filter_field()
  75. )
  76. cluster_id: ID | None = strawberry_django.filter_field()
  77. device: Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
  78. device_id: ID | None = strawberry_django.filter_field()
  79. platform: Annotated['PlatformFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  80. strawberry_django.filter_field()
  81. )
  82. platform_id: ID | None = strawberry_django.filter_field()
  83. status: (
  84. BaseFilterLookup[Annotated['VirtualMachineStatusEnum', strawberry.lazy('virtualization.graphql.enums')]] | None
  85. ) = (
  86. strawberry_django.filter_field()
  87. )
  88. role: Annotated['DeviceRoleFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  89. strawberry_django.filter_field()
  90. )
  91. role_id: ID | None = strawberry_django.filter_field()
  92. primary_ip4: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  93. strawberry_django.filter_field()
  94. )
  95. primary_ip4_id: ID | None = strawberry_django.filter_field()
  96. primary_ip6: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  97. strawberry_django.filter_field()
  98. )
  99. primary_ip6_id: ID | None = strawberry_django.filter_field()
  100. vcpus: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  101. strawberry_django.filter_field()
  102. )
  103. memory: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  104. strawberry_django.filter_field()
  105. )
  106. disk: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  107. strawberry_django.filter_field()
  108. )
  109. serial: FilterLookup[str] | None = strawberry_django.filter_field()
  110. interface_count: FilterLookup[int] | None = strawberry_django.filter_field()
  111. virtual_disk_count: FilterLookup[int] | None = strawberry_django.filter_field()
  112. interfaces: Annotated['VMInterfaceFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
  113. strawberry_django.filter_field()
  114. )
  115. services: Annotated['ServiceFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  116. strawberry_django.filter_field()
  117. )
  118. virtual_disks: Annotated['VirtualDiskFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
  119. strawberry_django.filter_field()
  120. )
  121. @strawberry_django.filter_type(models.VMInterface, lookups=True)
  122. class VMInterfaceFilter(VMComponentFilterMixin, InterfaceBaseFilterMixin):
  123. ip_addresses: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  124. strawberry_django.filter_field()
  125. )
  126. vrf: Annotated['VRFFilter', strawberry.lazy('ipam.graphql.filters')] | None = strawberry_django.filter_field()
  127. vrf_id: ID | None = strawberry_django.filter_field()
  128. parent: Annotated['VMInterfaceFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
  129. strawberry_django.filter_field()
  130. )
  131. parent_id: ID | None = strawberry_django.filter_field()
  132. fhrp_group_assignments: Annotated['FHRPGroupAssignmentFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
  133. strawberry_django.filter_field()
  134. )
  135. tunnel_terminations: Annotated['TunnelTerminationFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  136. strawberry_django.filter_field()
  137. )
  138. l2vpn_terminations: Annotated['L2VPNFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
  139. strawberry_django.filter_field()
  140. )
  141. mac_addresses: Annotated['MACAddressFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
  142. strawberry_django.filter_field()
  143. )
  144. @strawberry_django.filter_type(models.VirtualDisk, lookups=True)
  145. class VirtualDiskFilter(VMComponentFilterMixin):
  146. size: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
  147. strawberry_django.filter_field()
  148. )