Access VirtualMachineTemplates via api!
Serialization of VirtualMachineTemplates now fully works
This commit is contained in:
		
					parent
					
						
							
								5ed72bf4bf
							
						
					
				
			
			
				commit
				
					
						cbc13de34f
					
				
			
		
					 5 changed files with 180 additions and 59 deletions
				
			
		| 
						 | 
					@ -28,31 +28,30 @@ class VirtualMachineTemplate(models.Model):
 | 
				
			||||||
        return price
 | 
					        return price
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_name(self):
 | 
					    def get_name(self):
 | 
				
			||||||
        if self.manager is None:
 | 
					 | 
				
			||||||
            self.manager = OpenNebulaManager()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        template = self.manager._get_template(template_id=self.opennebula_id)
 | 
					        manager = OpenNebulaManager(create_user=False)
 | 
				
			||||||
 | 
					        template = manager._get_template(template_id=self.opennebula_id)
 | 
				
			||||||
        return template.name
 | 
					        return template.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_cores(self):
 | 
					    def get_cores(self):
 | 
				
			||||||
        if self.manager is None:
 | 
					 | 
				
			||||||
            self.manager = OpenNebulaManager()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        template = self.manager._get_template(template_id=self.opennebula_id).template
 | 
					        manager = OpenNebulaManager(create_user=False)
 | 
				
			||||||
 | 
					        template = manager._get_template(template_id=self.opennebula_id).template
 | 
				
			||||||
        return int(template.vcpu)
 | 
					        return int(template.vcpu)
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    def get_disk_size(self):
 | 
					    def get_disk_size(self):
 | 
				
			||||||
        if self.manager is None:
 | 
					 | 
				
			||||||
            self.manager = OpenNebulaManager()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        template = self.manager._get_template(template_id=self.opennebula_id).template
 | 
					        manager = OpenNebulaManager(create_user=False)
 | 
				
			||||||
        return int(template.disk.size) / 1024
 | 
					        template = manager._get_template(template_id=self.opennebula_id).template
 | 
				
			||||||
 | 
					        disk_size = 0
 | 
				
			||||||
 | 
					        for disk in template.disks:
 | 
				
			||||||
 | 
					            disk_size += int(disk.size)
 | 
				
			||||||
 | 
					        return disk_size / 1024
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_memory(self):
 | 
					    def get_memory(self):
 | 
				
			||||||
        if self.manager is None:
 | 
					 | 
				
			||||||
            self.manager = OpenNebulaManager()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        template = self.manager._get_template(template_id=self.opennebula_id).template
 | 
					        manager = OpenNebulaManager(create_user=False)
 | 
				
			||||||
 | 
					        template = manager._get_template(template_id=self.opennebula_id).template
 | 
				
			||||||
        return int(template.memory) / 1024
 | 
					        return int(template.memory) / 1024
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class VirtualMachine(models.Model):
 | 
					class VirtualMachine(models.Model):
 | 
				
			||||||
| 
						 | 
					@ -133,7 +132,7 @@ class VirtualMachine(models.Model):
 | 
				
			||||||
        vm = self.manager._get_vm(vm_id=self.opennebula_id)
 | 
					        vm = self.manager._get_vm(vm_id=self.opennebula_id)
 | 
				
			||||||
        return self.VM_STATE.get(str(vm.state))
 | 
					        return self.VM_STATE.get(str(vm.state))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_pirce(self)
 | 
					    def get_price(self):
 | 
				
			||||||
        return 0.0
 | 
					        return 0.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class OpenNebulaManager():
 | 
					class OpenNebulaManager():
 | 
				
			||||||
| 
						 | 
					@ -147,8 +146,7 @@ class OpenNebulaManager():
 | 
				
			||||||
            settings.OPENNEBULA_PASSWORD
 | 
					            settings.OPENNEBULA_PASSWORD
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					        if not create_user or email is None:
 | 
				
			||||||
        if not create_user:
 | 
					 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Get or create oppenebula user using given credentials
 | 
					        # Get or create oppenebula user using given credentials
 | 
				
			||||||
| 
						 | 
					@ -189,6 +187,7 @@ class OpenNebulaManager():
 | 
				
			||||||
                    host=settings.OPENNEBULA_DOMAIN,
 | 
					                    host=settings.OPENNEBULA_DOMAIN,
 | 
				
			||||||
                    protocol=settings.OPENNEBULA_PROTOCOL)
 | 
					                    protocol=settings.OPENNEBULA_PROTOCOL)
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
 | 
					            raise ConnectionRefusedError
 | 
				
			||||||
    def _get_user_pool(self):
 | 
					    def _get_user_pool(self):
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            user_pool = oca.UserPool(self.oneadmin_client)
 | 
					            user_pool = oca.UserPool(self.oneadmin_client)
 | 
				
			||||||
| 
						 | 
					@ -198,11 +197,30 @@ class OpenNebulaManager():
 | 
				
			||||||
                    host=settings.OPENNEBULA_DOMAIN,
 | 
					                    host=settings.OPENNEBULA_DOMAIN,
 | 
				
			||||||
                    protocol=settings.OPENNEBULA_PROTOCOL)
 | 
					                    protocol=settings.OPENNEBULA_PROTOCOL)
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
 | 
					            raise ConnectionRefusedError
 | 
				
			||||||
        return user_pool
 | 
					        return user_pool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def create_virtualmachine(self, template_id):
 | 
					    def _get_vm_pool(self):
 | 
				
			||||||
        template_pool = oca.VmTemplatePool(self.oneadmin_client)
 | 
					        try:
 | 
				
			||||||
        template_pool.info()
 | 
					           vm_pool = oca.VmPool(self.oneadmin_client)
 | 
				
			||||||
 | 
					           vm_pool.info()
 | 
				
			||||||
 | 
					        except ConnectionRefusedError:
 | 
				
			||||||
 | 
					            print('Could not connect to host: {host} via protocol {protocol}'.format(
 | 
				
			||||||
 | 
					                    host=settings.OPENNEBULA_DOMAIN,
 | 
				
			||||||
 | 
					                    protocol=settings.OPENNEBULA_PROTOCOL)
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					            raise ConnectionRefusedError
 | 
				
			||||||
 | 
					        return vm_pool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					    def _get_vm(self, vm_id):
 | 
				
			||||||
 | 
					        vm_pool = self._get_vm_pool()
 | 
				
			||||||
 | 
					        # Get virtual machines from all users 
 | 
				
			||||||
 | 
					        vm_pool.info(filter=-2)
 | 
				
			||||||
 | 
					        return vm_pool.get_by_id(vm_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def create_vm(self, template_id):
 | 
				
			||||||
 | 
					        template_pool = self._get_template_pool()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        template = template_pool.get_by_id(template_id)
 | 
					        template = template_pool.get_by_id(template_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -215,6 +233,28 @@ class OpenNebulaManager():
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        return vm_id
 | 
					        return vm_id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def delete_vm(self, vm_id):
 | 
				
			||||||
 | 
					        vm = self._get_vm(vm_id)
 | 
				
			||||||
 | 
					        vm.delete()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _get_template_pool(self):
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					           template_pool = oca.VmTemplatePool(self.oneadmin_client)
 | 
				
			||||||
 | 
					           template_pool.info()
 | 
				
			||||||
 | 
					        except ConnectionRefusedError:
 | 
				
			||||||
 | 
					            print('Could not connect to host: {host} via protocol {protocol}'.format(
 | 
				
			||||||
 | 
					                    host=settings.OPENNEBULA_DOMAIN,
 | 
				
			||||||
 | 
					                    protocol=settings.OPENNEBULA_PROTOCOL)
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					            raise ConnectionRefusedError
 | 
				
			||||||
 | 
					        return template_pool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _get_template(self, template_id):
 | 
				
			||||||
 | 
					        template_pool = self._get_template_pool()
 | 
				
			||||||
 | 
					        return template_pool.get_by_id(template_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    def create_template(self, name, cores, memory, disk_size):
 | 
					    def create_template(self, name, cores, memory, disk_size):
 | 
				
			||||||
        """Create and add a new template to opennebula.
 | 
					        """Create and add a new template to opennebula.
 | 
				
			||||||
        :param name:      A string representation describing the template.
 | 
					        :param name:      A string representation describing the template.
 | 
				
			||||||
| 
						 | 
					@ -247,3 +287,9 @@ class OpenNebulaManager():
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return template_id
 | 
					        return template_id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def delete_template(self, template_id):
 | 
				
			||||||
 | 
					        self.oneadmin_client.call(oca.VmTemplate.METHODS['delete'], template_id, False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,32 +0,0 @@
 | 
				
			||||||
from res_framework import serializers
 | 
					 | 
				
			||||||
from .models import VirtualMachine, VirtualMachineTemplate
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class VirtualMachineSerializer(serializers.ModelSerializer):
 | 
					 | 
				
			||||||
    """Serializer to map the virtual machine instance into JSON format."""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    cores       = serializers.IntegerField(read_only=True, source='get_cores') 
 | 
					 | 
				
			||||||
    name        = serializers.CharField(read_only=True, source='get_name')
 | 
					 | 
				
			||||||
    disk_size   = serializers.IntegerField(read_only=True, source='get_disk_size')
 | 
					 | 
				
			||||||
    memory      = serializers.IntegerField(read_only=True, source='get_memory')
 | 
					 | 
				
			||||||
    #TODO: See if we can change to IPAddressField
 | 
					 | 
				
			||||||
    ip          = serializers.CharField(read_only=True, source='get_ip')
 | 
					 | 
				
			||||||
    deploy_id   = serializers.IntegerField(read_only=True, source='get_deploy_id')
 | 
					 | 
				
			||||||
    id          = serializers.IntegerField(read_only=True, source='get_id')
 | 
					 | 
				
			||||||
    state       = serializers.CharField(read_only=True, source='get_state')
 | 
					 | 
				
			||||||
    price       = serializers.FloatField(read_only=True, source='get_price')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    class Meta:
 | 
					 | 
				
			||||||
        model = VirtualMachine
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class VirtualMachineTemplateSerializer(serializers.ModelSerializer):
 | 
					 | 
				
			||||||
    """Serializer to map the virtual machine template instance into JSON format."""
 | 
					 | 
				
			||||||
    cores       = serializers.IntegerField(read_only=True, source='get_cores') 
 | 
					 | 
				
			||||||
    name        = serializers.CharField(read_only=True, source='get_name')
 | 
					 | 
				
			||||||
    disk_size   = serializers.IntegerField(read_only=True, source='get_disk_size')
 | 
					 | 
				
			||||||
    memory      = serializers.IntegerField(read_only=True, source='get_memory')
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    class Meta:
 | 
					 | 
				
			||||||
        model = VirtualMachineTemplate
 | 
					 | 
				
			||||||
        fields = ()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
							
								
								
									
										63
									
								
								opennebula_api/serializers.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								opennebula_api/serializers.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,63 @@
 | 
				
			||||||
 | 
					import oca
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from rest_framework import serializers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from oca import OpenNebulaException
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from .models import VirtualMachine, VirtualMachineTemplate, OpenNebulaManager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class VirtualMachineSerializer(serializers.ModelSerializer):
 | 
				
			||||||
 | 
					    """Serializer to map the virtual machine instance into JSON format."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #TODO: Maybe we can change to template.get_cores
 | 
				
			||||||
 | 
					    cores       = serializers.IntegerField(read_only=True, source='get_cores') 
 | 
				
			||||||
 | 
					    name        = serializers.CharField(read_only=True, source='get_name')
 | 
				
			||||||
 | 
					    disk_size   = serializers.IntegerField(read_only=True, source='get_disk_size')
 | 
				
			||||||
 | 
					    memory      = serializers.IntegerField(read_only=True, source='get_memory')
 | 
				
			||||||
 | 
					    #TODO: See if we can change to IPAddressField
 | 
				
			||||||
 | 
					    ip          = serializers.CharField(read_only=True, source='get_ip')
 | 
				
			||||||
 | 
					    deploy_id   = serializers.IntegerField(read_only=True, source='get_deploy_id')
 | 
				
			||||||
 | 
					    vm_id          = serializers.IntegerField(read_only=True, source='get_vm_id')
 | 
				
			||||||
 | 
					    state       = serializers.CharField(read_only=True, source='get_state')
 | 
				
			||||||
 | 
					    price       = serializers.FloatField(read_only=True, source='get_price')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class Meta:
 | 
				
			||||||
 | 
					        model = VirtualMachine
 | 
				
			||||||
 | 
					        fields = ('id', 'opennebula_id', 'template', 'cores', 'name',
 | 
				
			||||||
 | 
					                'disk_size', 'memory', 'ip', 'deploy_id', 'state', 'vm_id',
 | 
				
			||||||
 | 
					                'price')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class VirtualMachineTemplateSerializer(serializers.ModelSerializer):
 | 
				
			||||||
 | 
					    """Serializer to map the virtual machine template instance into JSON format."""
 | 
				
			||||||
 | 
					    cores       = serializers.IntegerField(source='get_cores') 
 | 
				
			||||||
 | 
					    name        = serializers.CharField(source='get_name')
 | 
				
			||||||
 | 
					    disk_size   = serializers.IntegerField(source='get_disk_size')
 | 
				
			||||||
 | 
					    memory      = serializers.IntegerField(source='get_memory')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    class Meta:
 | 
				
			||||||
 | 
					        model = VirtualMachineTemplate
 | 
				
			||||||
 | 
					        fields = ('id', 'name', 'cores', 'memory', 'disk_size', 'base_price', 
 | 
				
			||||||
 | 
					                  'core_price', 'memory_price', 'disk_size_price', 'opennebula_id')
 | 
				
			||||||
 | 
					        read_only_fields = ('opennebula_id', )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def validate(self, data):
 | 
				
			||||||
 | 
					        # Create the opennebula model
 | 
				
			||||||
 | 
					        cores   = data.pop('get_cores')
 | 
				
			||||||
 | 
					        name    = data.pop('get_name')
 | 
				
			||||||
 | 
					        disk_size = data.pop('get_disk_size')
 | 
				
			||||||
 | 
					        memory  = data.pop('get_memory')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        manager = OpenNebulaManager(create_user = False)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            opennebula_id = manager.create_template(name=name, cores=cores,
 | 
				
			||||||
 | 
					                                                    memory=memory,
 | 
				
			||||||
 | 
					                                                    disk_size=disk_size)
 | 
				
			||||||
 | 
					            data.update({'opennebula_id':opennebula_id})
 | 
				
			||||||
 | 
					        except OpenNebulaException as err:
 | 
				
			||||||
 | 
					            raise serializers.ValidationError("OpenNebulaException occured. {0}".format(err))
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        return data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def create(self, validated_data):
 | 
				
			||||||
 | 
					        return VirtualMachineTemplate.objects.create(**validated_data)
 | 
				
			||||||
| 
						 | 
					@ -19,10 +19,10 @@ class OpenNebulaManagerTestCases(TestCase):
 | 
				
			||||||
    def test_model_can_connect_to_server(self):
 | 
					    def test_model_can_connect_to_server(self):
 | 
				
			||||||
        """Test the opennebula manager model can connect to a server."""
 | 
					        """Test the opennebula manager model can connect to a server."""
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            version = self.manager.version()
 | 
					            user_pool = self.manager._get_user_pool()
 | 
				
			||||||
        except:
 | 
					        except:
 | 
				
			||||||
            version = None
 | 
					            user_pool = None
 | 
				
			||||||
        self.assertFalse(version is None)
 | 
					        self.assertFalse(user_pool is None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_model_can_create_user(self):
 | 
					    def test_model_can_create_user(self):
 | 
				
			||||||
        """Test the opennebula manager model can create a new user."""
 | 
					        """Test the opennebula manager model can create a new user."""
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,12 @@ class OpenNebulaManagerTestCases(TestCase):
 | 
				
			||||||
        self.manager = OpenNebulaManager(email=self.email,
 | 
					        self.manager = OpenNebulaManager(email=self.email,
 | 
				
			||||||
                                         password=self.password,
 | 
					                                         password=self.password,
 | 
				
			||||||
                                         create_user=True)
 | 
					                                         create_user=True)
 | 
				
			||||||
        new_count = len(self.manager._get_user_pool())
 | 
					        user_pool = self.manager._get_user_pool()
 | 
				
			||||||
 | 
					        new_count = len(user_pool)
 | 
				
			||||||
 | 
					        # Remove the user afterwards
 | 
				
			||||||
 | 
					        user = user_pool.get_by_name(self.email)
 | 
				
			||||||
 | 
					        user.delete()
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        self.assertNotEqual(old_count, new_count)
 | 
					        self.assertNotEqual(old_count, new_count)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -67,6 +72,9 @@ class VirtualMachineTemplateTestCase(TestCase):
 | 
				
			||||||
        old_count = VirtualMachineTemplate.objects.count()
 | 
					        old_count = VirtualMachineTemplate.objects.count()
 | 
				
			||||||
        self.template.save()
 | 
					        self.template.save()
 | 
				
			||||||
        new_count = VirtualMachineTemplate.objects.count()
 | 
					        new_count = VirtualMachineTemplate.objects.count()
 | 
				
			||||||
 | 
					        # Remove the template afterwards
 | 
				
			||||||
 | 
					        template = self.manager._get_template(self.template.opennebula_id)
 | 
				
			||||||
 | 
					        template.delete()
 | 
				
			||||||
        self.assertNotEqual(old_count, new_count)
 | 
					        self.assertNotEqual(old_count, new_count)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_model_can_calculate_price(self):
 | 
					    def test_model_can_calculate_price(self):
 | 
				
			||||||
| 
						 | 
					@ -80,8 +88,26 @@ class VirtualMachineTemplateTestCase(TestCase):
 | 
				
			||||||
class VirtualMachineTestCase(TestCase):
 | 
					class VirtualMachineTestCase(TestCase):
 | 
				
			||||||
    def setUp(self):
 | 
					    def setUp(self):
 | 
				
			||||||
        """Define the test client and other test variables."""
 | 
					        """Define the test client and other test variables."""
 | 
				
			||||||
 | 
					        self.template_name = "Standard"
 | 
				
			||||||
 | 
					        self.base_price = 0.0
 | 
				
			||||||
 | 
					        self.core_price = 5.0
 | 
				
			||||||
 | 
					        self.memory_price = 2.0
 | 
				
			||||||
 | 
					        self.disk_size_price = 0.6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.cores = 1 
 | 
				
			||||||
 | 
					        self.memory = 1
 | 
				
			||||||
 | 
					        self.disk_size = 10.0
 | 
				
			||||||
        self.manager = OpenNebulaManager(email=None, password=None, create_user=False)
 | 
					        self.manager = OpenNebulaManager(email=None, password=None, create_user=False)
 | 
				
			||||||
        self.template = VirtualMachineTemplate.objects.first()
 | 
					        self.opennebula_id = self.manager.create_template(name=self.template_name,
 | 
				
			||||||
 | 
					                                                          cores=self.cores,
 | 
				
			||||||
 | 
					                                                          memory=self.memory,
 | 
				
			||||||
 | 
					                                                          disk_size=self.disk_size)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.template = VirtualMachineTemplate(opennebula_id=self.opennebula_id,
 | 
				
			||||||
 | 
					                                               base_price=self.base_price,
 | 
				
			||||||
 | 
					                                               memory_price=self.memory_price,
 | 
				
			||||||
 | 
					                                               core_price=self.core_price,
 | 
				
			||||||
 | 
					                                               disk_size_price=self.disk_size_price)
 | 
				
			||||||
        self.template_id = self.template.opennebula_id()
 | 
					        self.template_id = self.template.opennebula_id()
 | 
				
			||||||
        self.opennebula_id = self.manager.create_virtualmachine(template_id=self.template_id)
 | 
					        self.opennebula_id = self.manager.create_virtualmachine(template_id=self.template_id)
 | 
				
			||||||
                                           
 | 
					                                           
 | 
				
			||||||
| 
						 | 
					@ -95,6 +121,9 @@ class VirtualMachineTestCase(TestCase):
 | 
				
			||||||
        new_count = VirtualMachine.objects.count()
 | 
					        new_count = VirtualMachine.objects.count()
 | 
				
			||||||
        self.assertNotEqual(old_count, new_count)
 | 
					        self.assertNotEqual(old_count, new_count)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_model_can_create_a_virtualmachine_for_user(self):
 | 
				
			||||||
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_model_can_delete_a_virtualmachine(self):
 | 
					    def test_model_can_delete_a_virtualmachine(self):
 | 
				
			||||||
        """Test the virtualmachine model can delete a virtualmachine."""
 | 
					        """Test the virtualmachine model can delete a virtualmachine."""
 | 
				
			||||||
        self.virtualmachine.save()
 | 
					        self.virtualmachine.save()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,3 +1,18 @@
 | 
				
			||||||
from django.shortcuts import render
 | 
					from rest_framework import generics
 | 
				
			||||||
 | 
					from .serializers import VirtualMachineTemplateSerializer
 | 
				
			||||||
 | 
					from .models import VirtualMachineTemplate, OpenNebulaManager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Create your views here.
 | 
					class TemplateCreateView(generics.ListCreateAPIView):
 | 
				
			||||||
 | 
					    """This class defines the create behavior of our rest api."""
 | 
				
			||||||
 | 
					    queryset = VirtualMachineTemplate.objects.all()
 | 
				
			||||||
 | 
					    serializer_class = VirtualMachineTemplateSerializer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def perform_create(self, serializer):
 | 
				
			||||||
 | 
					        """Save the post data when creating a new template."""
 | 
				
			||||||
 | 
					        serializer.save()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TemplateDetailsView(generics.RetrieveUpdateDestroyAPIView):
 | 
				
			||||||
 | 
					    """This class handles the http GET, PUT and DELETE requests."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    queryset = VirtualMachineTemplate.objects.all()
 | 
				
			||||||
 | 
					    serializer_class = VirtualMachineTemplateSerializer
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue