Coverage for virtualization/graphql/filters.py: 93%
85 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1from typing import TYPE_CHECKING, Annotated
3import strawberry
4import strawberry_django
5from strawberry.scalars import ID
6from strawberry_django import BaseFilterLookup, ComparisonFilterLookup, FilterLookup, StrFilterLookup
8from dcim.graphql.filter_mixins import InterfaceBaseFilterMixin, RenderConfigFilterMixin, ScopedFilterMixin
9from extras.graphql.filter_mixins import ConfigContextFilterMixin
10from netbox.graphql.filter_mixins import ImageAttachmentFilterMixin
11from netbox.graphql.filters import NetBoxModelFilter, OrganizationalModelFilter, PrimaryModelFilter, register_filter
12from tenancy.graphql.filter_mixins import ContactFilterMixin, TenancyFilterMixin
13from virtualization import models
14from virtualization.graphql.filter_mixins import VMComponentFilterMixin
16if TYPE_CHECKING: 16 ↛ 17line 16 didn't jump to line 17 because the condition on line 16 was never true
17 from dcim.graphql.filters import DeviceFilter, DeviceRoleFilter, MACAddressFilter, PlatformFilter, SiteFilter
18 from ipam.graphql.filters import (
19 FHRPGroupAssignmentFilter,
20 IPAddressFilter,
21 ServiceFilter,
22 VLANGroupFilter,
23 VRFFilter,
24 )
25 from netbox.graphql.filter_lookups import FloatLookup, IntegerLookup
26 from vpn.graphql.filters import L2VPNFilter, TunnelTerminationFilter
28 from .enums import *
30__all__ = (
31 'ClusterFilter',
32 'ClusterGroupFilter',
33 'ClusterTypeFilter',
34 'VMInterfaceFilter',
35 'VirtualDiskFilter',
36 'VirtualMachineFilter',
37 'VirtualMachineTypeFilter',
38)
41@register_filter(models.Cluster, lookups=True)
42class ClusterFilter(ContactFilterMixin, ScopedFilterMixin, TenancyFilterMixin, PrimaryModelFilter):
43 name: StrFilterLookup | None = strawberry_django.filter_field()
44 type: Annotated['ClusterTypeFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
45 strawberry_django.filter_field()
46 )
47 type_id: ID | None = strawberry_django.filter_field()
48 group: Annotated['ClusterGroupFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
49 strawberry_django.filter_field()
50 )
51 group_id: ID | None = strawberry_django.filter_field()
52 status: BaseFilterLookup[Annotated['ClusterStatusEnum', strawberry.lazy('virtualization.graphql.enums')]] | None = (
53 strawberry_django.filter_field()
54 )
55 vlan_groups: Annotated['VLANGroupFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
56 strawberry_django.filter_field()
57 )
60@register_filter(models.ClusterGroup, lookups=True)
61class ClusterGroupFilter(ContactFilterMixin, OrganizationalModelFilter):
62 vlan_groups: Annotated['VLANGroupFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
63 strawberry_django.filter_field()
64 )
67@register_filter(models.ClusterType, lookups=True)
68class ClusterTypeFilter(OrganizationalModelFilter):
69 pass
72@register_filter(models.VirtualMachineType, lookups=True)
73class VirtualMachineTypeFilter(ImageAttachmentFilterMixin, PrimaryModelFilter):
74 default_platform: Annotated['PlatformFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
75 strawberry_django.filter_field()
76 )
77 default_platform_id: ID | None = strawberry_django.filter_field()
78 default_vcpus: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
79 strawberry_django.filter_field()
80 )
81 default_memory: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
82 strawberry_django.filter_field()
83 )
84 instances: Annotated['VirtualMachineFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
85 strawberry_django.filter_field()
86 )
87 virtual_machine_count: ComparisonFilterLookup[int] | None = strawberry_django.filter_field()
90@register_filter(models.VirtualMachine, lookups=True)
91class VirtualMachineFilter(
92 ContactFilterMixin,
93 ImageAttachmentFilterMixin,
94 RenderConfigFilterMixin,
95 ConfigContextFilterMixin,
96 TenancyFilterMixin,
97 PrimaryModelFilter,
98):
99 name: StrFilterLookup | None = strawberry_django.filter_field()
100 virtual_machine_type: (
101 Annotated['VirtualMachineTypeFilter', strawberry.lazy('virtualization.graphql.filters')] | None
102 ) = strawberry_django.filter_field()
103 site: Annotated['SiteFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
104 site_id: ID | None = strawberry_django.filter_field()
105 cluster: Annotated['ClusterFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
106 strawberry_django.filter_field()
107 )
108 cluster_id: ID | None = strawberry_django.filter_field()
109 device: Annotated['DeviceFilter', strawberry.lazy('dcim.graphql.filters')] | None = strawberry_django.filter_field()
110 device_id: ID | None = strawberry_django.filter_field()
111 platform: Annotated['PlatformFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
112 strawberry_django.filter_field()
113 )
114 platform_id: ID | None = strawberry_django.filter_field()
115 status: (
116 BaseFilterLookup[Annotated['VirtualMachineStatusEnum', strawberry.lazy('virtualization.graphql.enums')]] | None
117 ) = (
118 strawberry_django.filter_field()
119 )
120 role: Annotated['DeviceRoleFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
121 strawberry_django.filter_field()
122 )
123 role_id: ID | None = strawberry_django.filter_field()
124 primary_ip4: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
125 strawberry_django.filter_field()
126 )
127 primary_ip4_id: ID | None = strawberry_django.filter_field()
128 primary_ip6: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
129 strawberry_django.filter_field()
130 )
131 primary_ip6_id: ID | None = strawberry_django.filter_field()
132 vcpus: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
133 strawberry_django.filter_field()
134 )
135 memory: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
136 strawberry_django.filter_field()
137 )
138 disk: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
139 strawberry_django.filter_field()
140 )
141 serial: StrFilterLookup | None = strawberry_django.filter_field()
142 interface_count: FilterLookup[int] | None = strawberry_django.filter_field()
143 virtual_disk_count: FilterLookup[int] | None = strawberry_django.filter_field()
144 interfaces: Annotated['VMInterfaceFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
145 strawberry_django.filter_field()
146 )
147 services: Annotated['ServiceFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
148 strawberry_django.filter_field()
149 )
150 virtual_disks: Annotated['VirtualDiskFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
151 strawberry_django.filter_field()
152 )
153 start_on_boot: (
154 BaseFilterLookup[Annotated['VirtualMachineStartOnBootEnum', strawberry.lazy('virtualization.graphql.enums')]
155 ] | None) = (
156 strawberry_django.filter_field()
157 )
160@register_filter(models.VMInterface, lookups=True)
161class VMInterfaceFilter(InterfaceBaseFilterMixin, VMComponentFilterMixin, NetBoxModelFilter):
162 ip_addresses: Annotated['IPAddressFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
163 strawberry_django.filter_field()
164 )
165 vrf: Annotated['VRFFilter', strawberry.lazy('ipam.graphql.filters')] | None = strawberry_django.filter_field()
166 vrf_id: ID | None = strawberry_django.filter_field()
167 parent: Annotated['VMInterfaceFilter', strawberry.lazy('virtualization.graphql.filters')] | None = (
168 strawberry_django.filter_field()
169 )
170 parent_id: ID | None = strawberry_django.filter_field()
171 fhrp_group_assignments: Annotated['FHRPGroupAssignmentFilter', strawberry.lazy('ipam.graphql.filters')] | None = (
172 strawberry_django.filter_field()
173 )
174 tunnel_terminations: Annotated['TunnelTerminationFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
175 strawberry_django.filter_field()
176 )
177 l2vpn_terminations: Annotated['L2VPNFilter', strawberry.lazy('vpn.graphql.filters')] | None = (
178 strawberry_django.filter_field()
179 )
180 mac_addresses: Annotated['MACAddressFilter', strawberry.lazy('dcim.graphql.filters')] | None = (
181 strawberry_django.filter_field()
182 )
185@register_filter(models.VirtualDisk, lookups=True)
186class VirtualDiskFilter(VMComponentFilterMixin, NetBoxModelFilter):
187 size: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
188 strawberry_django.filter_field()
189 )