integrating hosting app with opennebula integration
This commit is contained in:
		
					parent
					
						
							
								56e6e43742
							
						
					
				
			
			
				commit
				
					
						085133fb53
					
				
			
		
					 2 changed files with 55 additions and 14 deletions
				
			
		|  | @ -15,6 +15,9 @@ from .managers import VMPlansManager | ||||||
| 
 | 
 | ||||||
| class VirtualMachineType(models.Model): | class VirtualMachineType(models.Model): | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  |     BASE_PRICE = 0.5 | ||||||
|  | 
 | ||||||
|     HETZNER_NUG = 'hetzner_nug' |     HETZNER_NUG = 'hetzner_nug' | ||||||
|     HETZNER = 'hetzner' |     HETZNER = 'hetzner' | ||||||
|     HETZNER_R6 = 'hetzner_raid6' |     HETZNER_R6 = 'hetzner_raid6' | ||||||
|  | @ -35,7 +38,6 @@ class VirtualMachineType(models.Model): | ||||||
|         (DE_LOCATION, 'Germany'), |         (DE_LOCATION, 'Germany'), | ||||||
|         (CH_LOCATION, 'Switzerland'), |         (CH_LOCATION, 'Switzerland'), | ||||||
|     ) |     ) | ||||||
| 
 |  | ||||||
|     description = models.TextField() |     description = models.TextField() | ||||||
|     base_price = models.FloatField() |     base_price = models.FloatField() | ||||||
|     memory_price = models.FloatField() |     memory_price = models.FloatField() | ||||||
|  | @ -52,11 +54,27 @@ class VirtualMachineType(models.Model): | ||||||
|         return [vm.get_serialized_data() |         return [vm.get_serialized_data() | ||||||
|                 for vm in cls.objects.all()] |                 for vm in cls.objects.all()] | ||||||
| 
 | 
 | ||||||
|     def calculate_price(self, specifications): |     # def calculate_price(self, specifications): | ||||||
|         price = float(specifications['cores']) * self.core_price |     #     price = float(specifications['cores']) * self.core_price | ||||||
|         price += float(specifications['memory']) * self.memory_price |     #     price += float(specifications['memory']) * self.memory_price | ||||||
|         price += float(specifications['disk_size']) * self.disk_size_price |     #     price += float(specifications['disk_size']) * self.disk_size_price | ||||||
|         price += self.base_price |     #     price += self.base_price | ||||||
|  |     #     return price | ||||||
|  | 
 | ||||||
|  |     @classmethod | ||||||
|  |     def get_price(cls, vm_template): | ||||||
|  |         return cls.BASE_PRICE * vm_template | ||||||
|  | 
 | ||||||
|  |     @classmethod | ||||||
|  |     def get_specs(cls, vm_template): | ||||||
|  |         return { | ||||||
|  |             'memory': 1024 * vm_template, | ||||||
|  |             'cores': 0.1 * vm_template, | ||||||
|  |             'disk_size': 10000 * vm_template | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     def calculate_price(self, vm_template): | ||||||
|  |         price = self.base_price * vm_template | ||||||
|         return price |         return price | ||||||
| 
 | 
 | ||||||
|     def defeault_price(self): |     def defeault_price(self): | ||||||
|  |  | ||||||
|  | @ -1,3 +1,4 @@ | ||||||
|  | from collections import namedtuple | ||||||
| 
 | 
 | ||||||
| from django.shortcuts import render | from django.shortcuts import render | ||||||
| from django.core.urlresolvers import reverse_lazy, reverse | from django.core.urlresolvers import reverse_lazy, reverse | ||||||
|  | @ -22,6 +23,7 @@ from utils.mailer import BaseEmail | ||||||
| from .models import VirtualMachineType, VirtualMachinePlan, HostingOrder | from .models import VirtualMachineType, VirtualMachinePlan, HostingOrder | ||||||
| from .forms import HostingUserSignupForm, HostingUserLoginForm | from .forms import HostingUserSignupForm, HostingUserLoginForm | ||||||
| from .mixins import ProcessVMSelectionMixin | from .mixins import ProcessVMSelectionMixin | ||||||
|  | from .opennebula_functions import HostingManageVMAdmin | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class DjangoHostingView(ProcessVMSelectionMixin, View): | class DjangoHostingView(ProcessVMSelectionMixin, View): | ||||||
|  | @ -246,18 +248,26 @@ class PaymentVMView(LoginRequiredMixin, FormView): | ||||||
|         if form.is_valid(): |         if form.is_valid(): | ||||||
|             context = self.get_context_data() |             context = self.get_context_data() | ||||||
|             specifications = request.session.get('vm_specs') |             specifications = request.session.get('vm_specs') | ||||||
|             vm_type = specifications.get('hosting_company') | 
 | ||||||
|             vm = VirtualMachineType.objects.get(hosting_company=vm_type) |             vm_template = specifications.get('vm_template', 1) | ||||||
|             final_price = vm.calculate_price(specifications) | 
 | ||||||
|  |             vm_type = VirtualMachineType.objects.first() | ||||||
|  | 
 | ||||||
|  |             final_price = VirtualMachineType.get_price(vm_template) | ||||||
|  | 
 | ||||||
|  |             specs = VirtualMachineType.get_specs(vm_template) | ||||||
| 
 | 
 | ||||||
|             plan_data = { |             plan_data = { | ||||||
|                 'vm_type': vm, |                 'vm_type': vm_type, | ||||||
|                 'cores': specifications.get('cores'), |                 'configuration': specifications.get( | ||||||
|                 'memory': specifications.get('memory'), |                     'configuration', | ||||||
|                 'disk_size': specifications.get('disk_size'), |                     'django' | ||||||
|                 'configuration': specifications.get('configuration'), |                 ), | ||||||
|                 'price': final_price |                 'price': final_price | ||||||
|             } |             } | ||||||
|  | 
 | ||||||
|  |             plan_data.update(specs) | ||||||
|  | 
 | ||||||
|             token = form.cleaned_data.get('token') |             token = form.cleaned_data.get('token') | ||||||
| 
 | 
 | ||||||
|             # Get or create stripe customer |             # Get or create stripe customer | ||||||
|  | @ -299,6 +309,19 @@ class PaymentVMView(LoginRequiredMixin, FormView): | ||||||
|             # If the Stripe payment was successed, set order status approved |             # If the Stripe payment was successed, set order status approved | ||||||
|             order.set_approved() |             order.set_approved() | ||||||
| 
 | 
 | ||||||
|  |             # Create VM using oppenebula functions  | ||||||
|  |             _request = namedtuple('request', 'POST user') | ||||||
|  |             _request.user = request.user | ||||||
|  |             # user = namedtuple('user', 'email') | ||||||
|  |             # email  | ||||||
|  |             _request.POST = { | ||||||
|  |                 'vm_template': vm_template | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             hosting_admin = HostingManageVMAdmin.__new__(HostingManageVMAdmin) | ||||||
|  |             hosting_admin.init_opennebula_client(_request) | ||||||
|  |             hosting_admin.create(_request) | ||||||
|  | 
 | ||||||
|             # Send notification to ungleich as soon as VM has been booked |             # Send notification to ungleich as soon as VM has been booked | ||||||
|             context = { |             context = { | ||||||
|                 'vm': plan, |                 'vm': plan, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue