2023-03-30 11:32:59 -07:00
|
|
|
from drf_spectacular.utils import extend_schema_serializer
|
2018-11-12 11:36:44 -05:00
|
|
|
from rest_framework import serializers
|
|
|
|
|
2024-02-15 14:49:27 -05:00
|
|
|
from netbox.api.fields import RelatedObjectCountField
|
2022-07-13 16:18:55 -04:00
|
|
|
from netbox.api.serializers import WritableNestedSerializer
|
2023-11-17 12:02:56 -08:00
|
|
|
from virtualization.models import *
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
__all__ = [
|
|
|
|
'NestedClusterGroupSerializer',
|
|
|
|
'NestedClusterSerializer',
|
|
|
|
'NestedClusterTypeSerializer',
|
2023-11-17 12:02:56 -08:00
|
|
|
'NestedVirtualDiskSerializer',
|
2020-06-23 15:46:20 -04:00
|
|
|
'NestedVMInterfaceSerializer',
|
2018-11-12 11:36:44 -05:00
|
|
|
'NestedVirtualMachineSerializer',
|
|
|
|
]
|
|
|
|
|
|
|
|
#
|
|
|
|
# Clusters
|
|
|
|
#
|
|
|
|
|
|
|
|
|
2023-03-30 11:32:59 -07:00
|
|
|
@extend_schema_serializer(
|
|
|
|
exclude_fields=('cluster_count',),
|
|
|
|
)
|
2018-11-12 11:36:44 -05:00
|
|
|
class NestedClusterTypeSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustertype-detail')
|
2024-02-15 14:49:27 -05:00
|
|
|
cluster_count = RelatedObjectCountField('clusters')
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = ClusterType
|
2021-03-16 10:06:25 -04:00
|
|
|
fields = ['id', 'url', 'display', 'name', 'slug', 'cluster_count']
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
|
2023-03-30 11:32:59 -07:00
|
|
|
@extend_schema_serializer(
|
|
|
|
exclude_fields=('cluster_count',),
|
|
|
|
)
|
2018-11-12 11:36:44 -05:00
|
|
|
class NestedClusterGroupSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustergroup-detail')
|
2024-02-15 14:49:27 -05:00
|
|
|
cluster_count = RelatedObjectCountField('clusters')
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = ClusterGroup
|
2021-03-16 10:06:25 -04:00
|
|
|
fields = ['id', 'url', 'display', 'name', 'slug', 'cluster_count']
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
|
2023-03-30 11:32:59 -07:00
|
|
|
@extend_schema_serializer(
|
|
|
|
exclude_fields=('virtualmachine_count',),
|
|
|
|
)
|
2018-11-12 11:36:44 -05:00
|
|
|
class NestedClusterSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:cluster-detail')
|
2024-02-15 14:49:27 -05:00
|
|
|
virtualmachine_count = RelatedObjectCountField('virtual_machines')
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = Cluster
|
2021-03-16 10:06:25 -04:00
|
|
|
fields = ['id', 'url', 'display', 'name', 'virtualmachine_count']
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Virtual machines
|
|
|
|
#
|
|
|
|
|
|
|
|
class NestedVirtualMachineSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:virtualmachine-detail')
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = VirtualMachine
|
2021-03-16 10:06:25 -04:00
|
|
|
fields = ['id', 'url', 'display', 'name']
|
2018-11-12 11:36:44 -05:00
|
|
|
|
|
|
|
|
2020-06-23 15:46:20 -04:00
|
|
|
class NestedVMInterfaceSerializer(WritableNestedSerializer):
|
2020-06-23 14:38:45 -04:00
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:vminterface-detail')
|
2018-11-12 11:36:44 -05:00
|
|
|
virtual_machine = NestedVirtualMachineSerializer(read_only=True)
|
|
|
|
|
|
|
|
class Meta:
|
2021-07-07 11:55:20 -04:00
|
|
|
model = VMInterface
|
2021-03-16 10:06:25 -04:00
|
|
|
fields = ['id', 'url', 'display', 'virtual_machine', 'name']
|
2023-11-17 12:02:56 -08:00
|
|
|
|
|
|
|
|
|
|
|
class NestedVirtualDiskSerializer(WritableNestedSerializer):
|
|
|
|
url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:virtualdisk-detail')
|
|
|
|
virtual_machine = NestedVirtualMachineSerializer(read_only=True)
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = VirtualDisk
|
|
|
|
fields = ['id', 'url', 'display', 'virtual_machine', 'name', 'size']
|