Clone all GraphQL objects to V1 versions

This commit is contained in:
Brian Tiemann
2025-10-23 20:19:16 -04:00
parent cee2a5e0ed
commit 867a01fae5
47 changed files with 6423 additions and 10 deletions

View File

@@ -0,0 +1,28 @@
from dataclasses import dataclass
from typing import Annotated, TYPE_CHECKING
import strawberry
import strawberry_django
from strawberry import ID
from strawberry_django import FilterLookup
from netbox.graphql.filter_mixins_v1 import NetBoxModelFilterMixinV1
if TYPE_CHECKING:
from .filters_v1 import VirtualMachineFilterV1
__all__ = (
'VMComponentFilterMixinV1',
)
@dataclass
class VMComponentFilterMixinV1(NetBoxModelFilterMixinV1):
virtual_machine: Annotated[
'VirtualMachineFilterV1', strawberry.lazy('virtualization.graphql.filters_v1')
] | None = (
strawberry_django.filter_field()
)
virtual_machine_id: ID | None = strawberry_django.filter_field()
name: FilterLookup[str] | None = strawberry_django.filter_field()
description: FilterLookup[str] | None = strawberry_django.filter_field()

View File

@@ -0,0 +1,170 @@
from typing import Annotated, TYPE_CHECKING
import strawberry
import strawberry_django
from strawberry.scalars import ID
from strawberry_django import FilterLookup
from dcim.graphql.filter_mixins_v1 import InterfaceBaseFilterMixinV1, RenderConfigFilterMixinV1, ScopedFilterMixinV1
from extras.graphql.filter_mixins_v1 import ConfigContextFilterMixinV1
from netbox.graphql.filter_mixins_v1 import (
ImageAttachmentFilterMixinV1,
OrganizationalModelFilterMixinV1,
PrimaryModelFilterMixinV1,
)
from tenancy.graphql.filter_mixins_v1 import ContactFilterMixinV1, TenancyFilterMixinV1
from virtualization import models
from virtualization.graphql.filter_mixins_v1 import VMComponentFilterMixinV1
if TYPE_CHECKING:
from .enums import *
from netbox.graphql.filter_lookups import FloatLookup, IntegerLookup
from dcim.graphql.filters_v1 import (
DeviceFilterV1, DeviceRoleFilterV1, MACAddressFilterV1, PlatformFilterV1, SiteFilterV1
)
from ipam.graphql.filters_v1 import (
FHRPGroupAssignmentFilterV1,
IPAddressFilterV1,
ServiceFilterV1,
VLANGroupFilterV1,
VRFFilterV1,
)
from vpn.graphql.filters_v1 import L2VPNFilterV1, TunnelTerminationFilterV1
__all__ = (
'ClusterFilterV1',
'ClusterGroupFilterV1',
'ClusterTypeFilterV1',
'VirtualMachineFilterV1',
'VMInterfaceFilterV1',
'VirtualDiskFilterV1',
)
@strawberry_django.filter_type(models.Cluster, lookups=True)
class ClusterFilterV1(ContactFilterMixinV1, ScopedFilterMixinV1, TenancyFilterMixinV1, PrimaryModelFilterMixinV1):
name: FilterLookup[str] | None = strawberry_django.filter_field()
type: Annotated['ClusterTypeFilterV1', strawberry.lazy('virtualization.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
type_id: ID | None = strawberry_django.filter_field()
group: Annotated['ClusterGroupFilterV1', strawberry.lazy('virtualization.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
group_id: ID | None = strawberry_django.filter_field()
status: Annotated['ClusterStatusEnum', strawberry.lazy('virtualization.graphql.enums')] | None = (
strawberry_django.filter_field()
)
vlan_groups: Annotated['VLANGroupFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
@strawberry_django.filter_type(models.ClusterGroup, lookups=True)
class ClusterGroupFilterV1(ContactFilterMixinV1, OrganizationalModelFilterMixinV1):
vlan_groups: Annotated['VLANGroupFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
@strawberry_django.filter_type(models.ClusterType, lookups=True)
class ClusterTypeFilterV1(OrganizationalModelFilterMixinV1):
pass
@strawberry_django.filter_type(models.VirtualMachine, lookups=True)
class VirtualMachineFilterV1(
ContactFilterMixinV1,
ImageAttachmentFilterMixinV1,
RenderConfigFilterMixinV1,
ConfigContextFilterMixinV1,
TenancyFilterMixinV1,
PrimaryModelFilterMixinV1,
):
name: FilterLookup[str] | None = strawberry_django.filter_field()
site: Annotated['SiteFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
site_id: ID | None = strawberry_django.filter_field()
cluster: Annotated['ClusterFilterV1', strawberry.lazy('virtualization.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
cluster_id: ID | None = strawberry_django.filter_field()
device: Annotated['DeviceFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
device_id: ID | None = strawberry_django.filter_field()
platform: Annotated['PlatformFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
platform_id: ID | None = strawberry_django.filter_field()
status: Annotated['VirtualMachineStatusEnum', strawberry.lazy('virtualization.graphql.enums')] | None = (
strawberry_django.filter_field()
)
role: Annotated['DeviceRoleFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
role_id: ID | None = strawberry_django.filter_field()
primary_ip4: Annotated['IPAddressFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
primary_ip4_id: ID | None = strawberry_django.filter_field()
primary_ip6: Annotated['IPAddressFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
primary_ip6_id: ID | None = strawberry_django.filter_field()
vcpus: Annotated['FloatLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field()
)
memory: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field()
)
disk: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field()
)
serial: FilterLookup[str] | None = strawberry_django.filter_field()
interface_count: FilterLookup[int] | None = strawberry_django.filter_field()
virtual_disk_count: FilterLookup[int] | None = strawberry_django.filter_field()
interfaces: Annotated['VMInterfaceFilterV1', strawberry.lazy('virtualization.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
services: Annotated['ServiceFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
virtual_disks: Annotated['VirtualDiskFilterV1', strawberry.lazy('virtualization.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
@strawberry_django.filter_type(models.VMInterface, lookups=True)
class VMInterfaceFilterV1(VMComponentFilterMixinV1, InterfaceBaseFilterMixinV1):
ip_addresses: Annotated['IPAddressFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
vrf: Annotated['VRFFilterV1', strawberry.lazy('ipam.graphql.filters_v1')] | None = strawberry_django.filter_field()
vrf_id: ID | None = strawberry_django.filter_field()
parent: Annotated['VMInterfaceFilterV1', strawberry.lazy('virtualization.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
parent_id: ID | None = strawberry_django.filter_field()
fhrp_group_assignments: Annotated[
'FHRPGroupAssignmentFilterV1', strawberry.lazy('ipam.graphql.filters_v1')
] | None = (
strawberry_django.filter_field()
)
tunnel_terminations: Annotated['TunnelTerminationFilterV1', strawberry.lazy('vpn.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
l2vpn_terminations: Annotated['L2VPNFilterV1', strawberry.lazy('vpn.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
mac_addresses: Annotated['MACAddressFilterV1', strawberry.lazy('dcim.graphql.filters_v1')] | None = (
strawberry_django.filter_field()
)
@strawberry_django.filter_type(models.VirtualDisk, lookups=True)
class VirtualDiskFilterV1(VMComponentFilterMixinV1):
size: Annotated['IntegerLookup', strawberry.lazy('netbox.graphql.filter_lookups')] | None = (
strawberry_django.filter_field()
)

View File

@@ -0,0 +1,27 @@
from typing import List
import strawberry
import strawberry_django
from .types_v1 import *
@strawberry.type(name="Query")
class VirtualizationQueryV1:
cluster: ClusterTypeV1 = strawberry_django.field()
cluster_list: List[ClusterTypeV1] = strawberry_django.field()
cluster_group: ClusterGroupTypeV1 = strawberry_django.field()
cluster_group_list: List[ClusterGroupTypeV1] = strawberry_django.field()
cluster_type: ClusterTypeTypeV1 = strawberry_django.field()
cluster_type_list: List[ClusterTypeTypeV1] = strawberry_django.field()
virtual_machine: VirtualMachineTypeV1 = strawberry_django.field()
virtual_machine_list: List[VirtualMachineTypeV1] = strawberry_django.field()
vm_interface: VMInterfaceTypeV1 = strawberry_django.field()
vm_interface_list: List[VMInterfaceTypeV1] = strawberry_django.field()
virtual_disk: VirtualDiskTypeV1 = strawberry_django.field()
virtual_disk_list: List[VirtualDiskTypeV1] = strawberry_django.field()

View File

@@ -0,0 +1,146 @@
from typing import Annotated, List, TYPE_CHECKING, Union
import strawberry
import strawberry_django
from extras.graphql.mixins_v1 import ConfigContextMixinV1, ContactsMixinV1
from ipam.graphql.mixins_v1 import IPAddressesMixinV1, VLANGroupsMixinV1
from netbox.graphql.scalars import BigInt
from netbox.graphql.types_v1 import OrganizationalObjectTypeV1, NetBoxObjectTypeV1
from virtualization import models
from .filters_v1 import *
if TYPE_CHECKING:
from dcim.graphql.types_v1 import (
DeviceRoleTypeV1,
DeviceTypeV1,
LocationTypeV1,
MACAddressTypeV1,
PlatformTypeV1,
RegionTypeV1,
SiteGroupTypeV1,
SiteTypeV1,
)
from extras.graphql.types_v1 import ConfigTemplateTypeV1
from ipam.graphql.types_v1 import IPAddressTypeV1, ServiceTypeV1, VLANTranslationPolicyTypeV1, VLANTypeV1, VRFTypeV1
from tenancy.graphql.types_v1 import TenantTypeV1
__all__ = (
'ClusterTypeV1',
'ClusterGroupTypeV1',
'ClusterTypeTypeV1',
'VirtualDiskTypeV1',
'VirtualMachineTypeV1',
'VMInterfaceTypeV1',
)
@strawberry.type
class ComponentTypeV1(NetBoxObjectTypeV1):
"""
Base type for device/VM components
"""
virtual_machine: Annotated["VirtualMachineTypeV1", strawberry.lazy('virtualization.graphql.types_v1')]
@strawberry_django.type(
models.Cluster,
exclude=['scope_type', 'scope_id', '_location', '_region', '_site', '_site_group'],
filters=ClusterFilterV1,
pagination=True
)
class ClusterTypeV1(ContactsMixinV1, VLANGroupsMixinV1, NetBoxObjectTypeV1):
type: Annotated["ClusterTypeTypeV1", strawberry.lazy('virtualization.graphql.types_v1')] | None
group: Annotated["ClusterGroupTypeV1", strawberry.lazy('virtualization.graphql.types_v1')] | None
tenant: Annotated["TenantTypeV1", strawberry.lazy('tenancy.graphql.types_v1')] | None
virtual_machines: List[Annotated["VirtualMachineTypeV1", strawberry.lazy('virtualization.graphql.types_v1')]]
devices: List[Annotated["DeviceTypeV1", strawberry.lazy('dcim.graphql.types_v1')]]
@strawberry_django.field
def scope(self) -> Annotated[Union[
Annotated["LocationTypeV1", strawberry.lazy('dcim.graphql.types_v1')],
Annotated["RegionTypeV1", strawberry.lazy('dcim.graphql.types_v1')],
Annotated["SiteGroupTypeV1", strawberry.lazy('dcim.graphql.types_v1')],
Annotated["SiteTypeV1", strawberry.lazy('dcim.graphql.types_v1')],
], strawberry.union("ClusterScopeTypeV1")] | None:
return self.scope
@strawberry_django.type(
models.ClusterGroup,
fields='__all__',
filters=ClusterGroupFilterV1,
pagination=True
)
class ClusterGroupTypeV1(ContactsMixinV1, VLANGroupsMixinV1, OrganizationalObjectTypeV1):
clusters: List[Annotated["ClusterTypeV1", strawberry.lazy('virtualization.graphql.types_v1')]]
@strawberry_django.type(
models.ClusterType,
fields='__all__',
filters=ClusterTypeFilterV1,
pagination=True
)
class ClusterTypeTypeV1(OrganizationalObjectTypeV1):
clusters: List[ClusterTypeV1]
@strawberry_django.type(
models.VirtualMachine,
fields='__all__',
filters=VirtualMachineFilterV1,
pagination=True
)
class VirtualMachineTypeV1(ConfigContextMixinV1, ContactsMixinV1, NetBoxObjectTypeV1):
interface_count: BigInt
virtual_disk_count: BigInt
interface_count: BigInt
config_template: Annotated["ConfigTemplateTypeV1", strawberry.lazy('extras.graphql.types_v1')] | None
site: Annotated["SiteTypeV1", strawberry.lazy('dcim.graphql.types_v1')] | None
cluster: Annotated["ClusterTypeV1", strawberry.lazy('virtualization.graphql.types_v1')] | None
device: Annotated["DeviceTypeV1", strawberry.lazy('dcim.graphql.types_v1')] | None
tenant: Annotated["TenantTypeV1", strawberry.lazy('tenancy.graphql.types_v1')] | None
platform: Annotated["PlatformTypeV1", strawberry.lazy('dcim.graphql.types_v1')] | None
role: Annotated["DeviceRoleTypeV1", strawberry.lazy('dcim.graphql.types_v1')] | None
primary_ip4: Annotated["IPAddressTypeV1", strawberry.lazy('ipam.graphql.types_v1')] | None
primary_ip6: Annotated["IPAddressTypeV1", strawberry.lazy('ipam.graphql.types_v1')] | None
interfaces: List[Annotated["VMInterfaceTypeV1", strawberry.lazy('virtualization.graphql.types_v1')]]
services: List[Annotated["ServiceTypeV1", strawberry.lazy('ipam.graphql.types_v1')]]
virtualdisks: List[Annotated["VirtualDiskTypeV1", strawberry.lazy('virtualization.graphql.types_v1')]]
@strawberry_django.type(
models.VMInterface,
fields='__all__',
filters=VMInterfaceFilterV1,
pagination=True
)
class VMInterfaceTypeV1(IPAddressesMixinV1, ComponentTypeV1):
_name: str
mac_address: str | None
parent: Annotated["VMInterfaceTypeV1", strawberry.lazy('virtualization.graphql.types_v1')] | None
bridge: Annotated["VMInterfaceTypeV1", strawberry.lazy('virtualization.graphql.types_v1')] | None
untagged_vlan: Annotated["VLANTypeV1", strawberry.lazy('ipam.graphql.types_v1')] | None
vrf: Annotated["VRFTypeV1", strawberry.lazy('ipam.graphql.types_v1')] | None
primary_mac_address: Annotated["MACAddressTypeV1", strawberry.lazy('dcim.graphql.types_v1')] | None
qinq_svlan: Annotated["VLANTypeV1", strawberry.lazy('ipam.graphql.types_v1')] | None
vlan_translation_policy: Annotated["VLANTranslationPolicyTypeV1", strawberry.lazy('ipam.graphql.types_v1')] | None
tagged_vlans: List[Annotated["VLANTypeV1", strawberry.lazy('ipam.graphql.types_v1')]]
bridge_interfaces: List[Annotated["VMInterfaceTypeV1", strawberry.lazy('virtualization.graphql.types_v1')]]
child_interfaces: List[Annotated["VMInterfaceTypeV1", strawberry.lazy('virtualization.graphql.types_v1')]]
mac_addresses: List[Annotated["MACAddressTypeV1", strawberry.lazy('dcim.graphql.types_v1')]]
@strawberry_django.type(
models.VirtualDisk,
fields='__all__',
filters=VirtualDiskFilterV1,
pagination=True
)
class VirtualDiskTypeV1(ComponentTypeV1):
pass