serializers.py 5 KB
Newer Older
1 2
from rest_framework.renderers import JSONRenderer
from rest_framework import serializers
3
from django.contrib.auth.models import Group, User
4

5
from vm.models import Instance, InstanceTemplate, Lease, Interface, Node, InstanceActivity
6
from firewall.models import Vlan
7
from storage.models import Disk, StorageActivity
8

9
class InstanceActivitySerializer(serializers.ModelSerializer):
10 11 12
    get_percentage = serializers.IntegerField()
    result_data = serializers.JSONField()

13 14
    class Meta:
        model = InstanceActivity
15 16 17
        fields = ('id', 'instance', 'resultant_state', 'interruptible', 'activity_code', 'parent', 
                    'task_uuid', 'user', 'started', 'finished', 'succeeded', 'result_data', 'created', 'modified', 'get_percentage')

18 19 20 21 22 23
class StorageActivitySerializer(serializers.ModelSerializer):

    class Meta:
        model = StorageActivity
        fields = ('id', 'parent', 'task_uuid', 'user', 'started', 'finished', 'succeeded', 'result_data', 'created', 'modified', 'disk')

24
    
25

26 27 28 29 30 31 32 33
class GroupSerializer(serializers.ModelSerializer): 
    class Meta:
        model = Group
        fields = ('id', 'name', 'user_set')

class UserSerializer(serializers.ModelSerializer):    
    class Meta:
        model = User
34
        fields = ('id', 'username', 'email', 'is_staff', 'groups', 'is_superuser', 'first_name', 'last_name')
35 36


37 38 39 40 41 42 43
class NodeSerializer(serializers.ModelSerializer):
    class Meta:
        model = Node
        fields = [ 'id', 'name', 'priority', 'host', 'enabled', 'schedule_enabled',
                    'traits', 'overcommit', 'ram_weight', 'cpu_weight', 'time_stamp' ]


44 45 46 47 48
class InstanceTemplateSerializer(serializers.ModelSerializer):
    class Meta:
        model = InstanceTemplate
        fields = [ 'id', 'name', 'description', 'parent', 'owner', 'access_method', 'boot_menu', 
                    'lease', 'raw_data', 'cloud_init', 'ci_meta_data', 'ci_user_data', 'system',
49
                    'has_agent', 'num_cores', 'ram_size', 'max_ram_size', 'arch', 'priority', 'disks']
50 51 52 53 54 55 56


class LeaseSerializer(serializers.ModelSerializer):
    class Meta:
        model = Lease
        fields = [ 'id', 'name', 'suspend_interval_seconds', 'delete_interval_seconds']

57 58 59 60 61

class DiskSerializer(serializers.ModelSerializer):
    class Meta:
        model = Disk
        fields = ['id', 'name', 'filename', 'datastore', 'type', 'bus', 'size', 'base',
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
                    'dev_num', 'destroyed', 'ci_disk', 'is_ready']


class InstanceSerializer(serializers.ModelSerializer):
    ipv4addr = serializers.SerializerMethodField('get_ipv4')
    ipv6addr = serializers.SerializerMethodField('get_ipv6')

    def get_ipv4(self, i):
        return str(i.ipv4)

    def get_ipv6(self, i):
        return str(i.ipv6)

    class Meta:
        model = Instance
        fields = ['id', 'name', 'description', 'status', 'owner', 'access_method', 'boot_menu', 'pw', 'is_base',
                    'lease', 'raw_data', 'cloud_init', 'ci_meta_data', 'ci_user_data', 'system', 'req_traits',
                    'has_agent', 'num_cores', 'ram_size', 'max_ram_size', 'arch', 'priority', 'disks', 'node', 'ipv4addr', 'ipv6addr']
80 81 82 83
        extra_kwargs = {
            'disks': {'required': False, 'allow_empty': True,},
            'req_traits': {'required': False, 'allow_empty': True,}
        }
84 85 86


class InterfaceSerializer(serializers.ModelSerializer):
87 88 89 90 91 92 93 94 95 96 97 98 99
    mac = serializers.SerializerMethodField('get_mac')
    ipv4 = serializers.SerializerMethodField('get_ipv4')
    ipv6 = serializers.SerializerMethodField('get_ipv6')

    def get_mac(self, i):
        return str(i.mac)

    def get_ipv4(self, i):
        return str(i.ipv4)

    def get_ipv6(self, i):
        return str(i.ipv6)

100 101
    class Meta:
        model = Interface
102
        fields = ['id', 'vlan', 'host', 'instance', 'model', 'host', 'mac', 'ipv4', 'ipv6']
103 104 105 106 107


class VlanSerializer(serializers.ModelSerializer):
    class Meta:
        model = Vlan
108 109 110 111
        fields = ['id', 'vid', 'name', 'description', 'comment', 'domain']


class CreateDiskSerializer(serializers.Serializer):
112
    size = serializers.CharField(max_length=50)
113 114 115
    name = serializers.CharField(max_length=100)


116 117 118 119
class ResizeDiskSerializer(serializers.Serializer):
    size = serializers.CharField(max_length=50)
    disk = serializers.IntegerField()

120 121
class DownloadDiskSerializer(serializers.Serializer):
    url = serializers.CharField(max_length=500)
122 123
    name = serializers.CharField(max_length=100)

124 125 126
class CreateTemplateSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=100)

127 128 129 130 131 132 133
class DestroyDiskSerializer(serializers.Serializer):
    disk = serializers.IntegerField()
    instance = serializers.IntegerField(required=False)

    class Meta:
        extra_kwargs = {'instance': {'required': False, 'allow_null': True}}

Karsa Zoltán István committed
134 135 136
class AddPortSerializer(serializers.Serializer):
    port_type = serializers.CharField(max_length=5)
    port_number = serializers.IntegerField()
137 138 139 140 141 142

class VMDeploySerializer(serializers.Serializer):
    node = serializers.IntegerField(required=False)

    class Meta:
        extra_kwargs = {'node': {'required': False, 'allow_null': True}}