clusters.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from rest_framework import serializers
  2. from dcim.api.serializers_.sites import SiteSerializer
  3. from netbox.api.fields import ChoiceField, RelatedObjectCountField
  4. from netbox.api.serializers import NetBoxModelSerializer
  5. from tenancy.api.serializers_.tenants import TenantSerializer
  6. from virtualization.choices import *
  7. from virtualization.models import Cluster, ClusterGroup, ClusterType
  8. __all__ = (
  9. 'ClusterGroupSerializer',
  10. 'ClusterSerializer',
  11. 'ClusterTypeSerializer',
  12. )
  13. class ClusterTypeSerializer(NetBoxModelSerializer):
  14. url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustertype-detail')
  15. # Related object counts
  16. cluster_count = RelatedObjectCountField('clusters')
  17. class Meta:
  18. model = ClusterType
  19. fields = [
  20. 'id', 'url', 'display', 'name', 'slug', 'description', 'tags', 'custom_fields', 'created', 'last_updated',
  21. 'cluster_count',
  22. ]
  23. brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'cluster_count')
  24. class ClusterGroupSerializer(NetBoxModelSerializer):
  25. url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:clustergroup-detail')
  26. # Related object counts
  27. cluster_count = RelatedObjectCountField('clusters')
  28. class Meta:
  29. model = ClusterGroup
  30. fields = [
  31. 'id', 'url', 'display', 'name', 'slug', 'description', 'tags', 'custom_fields', 'created', 'last_updated',
  32. 'cluster_count',
  33. ]
  34. brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'cluster_count')
  35. class ClusterSerializer(NetBoxModelSerializer):
  36. url = serializers.HyperlinkedIdentityField(view_name='virtualization-api:cluster-detail')
  37. type = ClusterTypeSerializer(nested=True)
  38. group = ClusterGroupSerializer(nested=True, required=False, allow_null=True, default=None)
  39. status = ChoiceField(choices=ClusterStatusChoices, required=False)
  40. tenant = TenantSerializer(nested=True, required=False, allow_null=True)
  41. site = SiteSerializer(nested=True, required=False, allow_null=True, default=None)
  42. # Related object counts
  43. device_count = RelatedObjectCountField('devices')
  44. virtualmachine_count = RelatedObjectCountField('virtual_machines')
  45. class Meta:
  46. model = Cluster
  47. fields = [
  48. 'id', 'url', 'display', 'name', 'type', 'group', 'status', 'tenant', 'site', 'description', 'comments',
  49. 'tags', 'custom_fields', 'created', 'last_updated', 'device_count', 'virtualmachine_count',
  50. ]
  51. brief_fields = ('id', 'url', 'display', 'name', 'description', 'virtualmachine_count')