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…
Reference in a new issue