Refactored code to introduce different VM templates
This commit is contained in:
parent
58d3dd6624
commit
6d4e9d8a83
2 changed files with 61 additions and 7 deletions
|
@ -14,6 +14,7 @@ from django.utils.translation import ugettext_lazy as _
|
|||
from oca.exceptions import OpenNebulaException
|
||||
from oca.pool import WrongNameError
|
||||
|
||||
from django import forms
|
||||
# Get an instance of a logger
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -84,6 +85,7 @@ class HostingManageVMAdmin(admin.ModelAdmin):
|
|||
# Include common variables for rendering the admin template.
|
||||
self.admin_site.each_context(request),
|
||||
vms=vm_pool,
|
||||
form=HostingManageVMForm
|
||||
)
|
||||
return TemplateResponse(request, "hosting/managevms.html", context)
|
||||
|
||||
|
@ -232,6 +234,62 @@ class HostingManageVMAdmin(admin.ModelAdmin):
|
|||
"Error : {0}".format(err))
|
||||
logger.error("Error : {0}".format(err))
|
||||
|
||||
def set_field_html_name(cls, new_name):
|
||||
"""
|
||||
This creates wrapper around the normal widget rendering,
|
||||
allowing for a custom field name (new_name).
|
||||
"""
|
||||
old_render = cls.widget.render
|
||||
def _widget_render_wrapper(name, value, attrs=None):
|
||||
return old_render(new_name, value, attrs)
|
||||
cls.widget.render = _widget_render_wrapper
|
||||
|
||||
class HostingManageVMForm(forms.Form):
|
||||
vm_templates = []
|
||||
VM_CHOICES = (('1', 'disk = 10GB, vcpu=1, ram=1GB'),
|
||||
('2', 'disk = 20GB, vcpu=2, ram=2GB'),
|
||||
('3', 'disk = 40GB, vcpu=4, ram=4GB'),
|
||||
('4', 'disk = 80GB, vcpu=8, ram=8GB'),
|
||||
('5', 'disk = 160GB, vcpu=16, ram=16GB'),
|
||||
('6', 'disk = 320GB, vcpu=32, ram=32GB'),
|
||||
('7', 'disk = 640GB, vcpu=64, ram=64GB'),
|
||||
('8', 'disk = 1280GB, vcpu=128, ram=128GB'))
|
||||
#for i in range(0,8):
|
||||
# factor = pow(2, i)
|
||||
# vm_templates.append(VMTemplate(i, VM_CHOICES[i], 10000 * factor, factor , 0.1 * factor, 1024 * factor))
|
||||
field = forms.ChoiceField(label="Choose a VM Template ", choices=VM_CHOICES, widget=forms.Select(attrs={"id": "vm_template"}))
|
||||
set_field_html_name(field, 'vm_template')
|
||||
class ManageVMView(View):
|
||||
template_name = "hosting/managevms.html"
|
||||
context_object_name = "managevms"
|
||||
model = HostingManageVMAdmin
|
||||
|
||||
def get(self, *args, **kwargs):
|
||||
form = HostingManageVMsForm()
|
||||
context = {
|
||||
'vms': model.get_vm_pool(),
|
||||
'form': form,
|
||||
}
|
||||
return TemplateResponse(request, template_name, context)
|
||||
|
||||
|
||||
|
||||
class VMTemplate:
|
||||
"""A simple representation of a VM template.
|
||||
|
||||
:param template_id: The id of the template
|
||||
:param label: A string representation describing the template. Used as the label in view
|
||||
:param disk: VM disk space in MB
|
||||
:param vcpu: Virtual cpu for the VM
|
||||
:param cpu: CPU for the VM
|
||||
:param ram: The RAM for the VM
|
||||
"""
|
||||
def __init__(self, template_id, label, disk, vcpu, cpu, ram):
|
||||
self.template_id = template_id
|
||||
self.label = label
|
||||
self.disk = disk
|
||||
self.vcpu = vcpu
|
||||
self.cpu = cpu
|
||||
|
||||
# Returns random password that is needed by OpenNebula
|
||||
def get_random_password():
|
||||
|
|
|
@ -2,13 +2,9 @@
|
|||
{% block content %}
|
||||
|
||||
<form action="{% url 'admin:createvm' %}" method="post">
|
||||
{% csrf_token %}
|
||||
<select id="vm_template" name="vm_template">
|
||||
<option value="select">Select a template</option>
|
||||
<option value="1">disk = 10GB, vcpu=1, ram=1GB</option>
|
||||
<option value="2">disk = 20GB, vcpu=2, ram=2GB</option>
|
||||
</select>
|
||||
<input type="submit" name="create_vm" value="Create VM" />
|
||||
{% csrf_token %}
|
||||
{{ form }}
|
||||
<input type="submit" name="create_vm" value="Create VM" />
|
||||
</form>
|
||||
{% if vms %}
|
||||
<section>
|
||||
|
|
Loading…
Reference in a new issue