| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- from __future__ import unicode_literals
- from rest_framework import serializers
- from dcim.api.serializers import NestedDeviceRoleSerializer, NestedPlatformSerializer, NestedSiteSerializer
- from dcim.constants import IFACE_FF_VIRTUAL
- from dcim.models import Interface
- from extras.api.customfields import CustomFieldModelSerializer
- from ipam.models import IPAddress
- from tenancy.api.serializers import NestedTenantSerializer
- from utilities.api import ChoiceFieldSerializer, ValidatedModelSerializer
- from virtualization.constants import STATUS_CHOICES
- from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine
- #
- # Cluster types
- #
- class ClusterTypeSerializer(ValidatedModelSerializer):
- class Meta:
- model = ClusterType
- fields = ['id', 'name', 'slug']
- class NestedClusterTypeSerializer(serializers.ModelSerializer):
- url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustertype-detail')
- class Meta:
- model = ClusterType
- fields = ['id', 'url', 'name', 'slug']
- #
- # Cluster groups
- #
- class ClusterGroupSerializer(ValidatedModelSerializer):
- class Meta:
- model = ClusterGroup
- fields = ['id', 'name', 'slug']
- class NestedClusterGroupSerializer(serializers.ModelSerializer):
- url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustergroup-detail')
- class Meta:
- model = ClusterGroup
- fields = ['id', 'url', 'name', 'slug']
- #
- # Clusters
- #
- class ClusterSerializer(CustomFieldModelSerializer):
- type = NestedClusterTypeSerializer()
- group = NestedClusterGroupSerializer()
- site = NestedSiteSerializer()
- class Meta:
- model = Cluster
- fields = ['id', 'name', 'type', 'group', 'site', 'comments', 'custom_fields', 'created', 'last_updated']
- class NestedClusterSerializer(serializers.ModelSerializer):
- url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:cluster-detail')
- class Meta:
- model = Cluster
- fields = ['id', 'url', 'name']
- class WritableClusterSerializer(CustomFieldModelSerializer):
- class Meta:
- model = Cluster
- fields = ['id', 'name', 'type', 'group', 'site', 'comments', 'custom_fields', 'created', 'last_updated']
- #
- # Virtual machines
- #
- # Cannot import ipam.api.NestedIPAddressSerializer due to circular dependency
- class VirtualMachineIPAddressSerializer(serializers.ModelSerializer):
- url = serializers.HyperlinkedIdentityField(view_name='ipam-api:ipaddress-detail')
- class Meta:
- model = IPAddress
- fields = ['id', 'url', 'family', 'address']
- class VirtualMachineSerializer(CustomFieldModelSerializer):
- status = ChoiceFieldSerializer(choices=STATUS_CHOICES)
- cluster = NestedClusterSerializer()
- role = NestedDeviceRoleSerializer()
- tenant = NestedTenantSerializer()
- platform = NestedPlatformSerializer()
- primary_ip = VirtualMachineIPAddressSerializer()
- primary_ip4 = VirtualMachineIPAddressSerializer()
- primary_ip6 = VirtualMachineIPAddressSerializer()
- class Meta:
- model = VirtualMachine
- fields = [
- 'id', 'name', 'status', 'cluster', 'role', 'tenant', 'platform', 'primary_ip', 'primary_ip4', 'primary_ip6',
- 'vcpus', 'memory', 'disk', 'comments', 'custom_fields', 'created', 'last_updated',
- ]
- class NestedVirtualMachineSerializer(serializers.ModelSerializer):
- url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:virtualmachine-detail')
- class Meta:
- model = VirtualMachine
- fields = ['id', 'url', 'name']
- class WritableVirtualMachineSerializer(CustomFieldModelSerializer):
- class Meta:
- model = VirtualMachine
- fields = [
- 'id', 'name', 'status', 'cluster', 'role', 'tenant', 'platform', 'primary_ip4', 'primary_ip6', 'vcpus',
- 'memory', 'disk', 'comments', 'custom_fields', 'created', 'last_updated',
- ]
- #
- # VM interfaces
- #
- class InterfaceSerializer(serializers.ModelSerializer):
- virtual_machine = NestedVirtualMachineSerializer()
- class Meta:
- model = Interface
- fields = [
- 'id', 'name', 'virtual_machine', 'enabled', 'mac_address', 'mtu', 'description',
- ]
- class NestedInterfaceSerializer(serializers.ModelSerializer):
- url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:interface-detail')
- class Meta:
- model = Interface
- fields = ['id', 'url', 'name']
- class WritableInterfaceSerializer(ValidatedModelSerializer):
- form_factor = serializers.IntegerField(default=IFACE_FF_VIRTUAL)
- class Meta:
- model = Interface
- fields = [
- 'id', 'name', 'virtual_machine', 'form_factor', 'enabled', 'mac_address', 'mtu', 'description',
- ]
|