summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
230d47e)
svn path=/trunk/packages/sipb-xen-www/; revision=440
import templates
from Cheetah.Template import Template
import templates
from Cheetah.Template import Template
-from sipb_xen_database import Machine, CDROM, ctx, connect, MachineAccess
+import sipb_xen_database
+from sipb_xen_database import Machine, CDROM, ctx, connect, MachineAccess, Type
import validation
from webcommon import InvalidInput, CodeError, g
import controls
import validation
from webcommon import InvalidInput, CodeError, g
import controls
else:
return '<p>STDERR:</p><pre>' + str(addition) + '</pre>'
else:
return '<p>STDERR:</p><pre>' + str(addition) + '</pre>'
+Template.sipb_xen_database = sipb_xen_database
Template.helppopup = staticmethod(helppopup)
Template.err = None
Template.helppopup = staticmethod(helppopup)
Template.err = None
disk = 4.0
cdrom = ''
name = ''
disk = 4.0
cdrom = ''
name = ''
def __init__(self, max_memory=None, max_disk=None, **kws):
def __init__(self, max_memory=None, max_disk=None, **kws):
+ self.type = Type.get('linux-hvm')
if max_memory is not None:
self.memory = min(self.memory, max_memory)
if max_disk is not None:
if max_memory is not None:
self.memory = min(self.memory, max_memory)
if max_disk is not None:
memory = validation.validMemory(user, memory, machine, on=False)
machine.memory = memory
memory = validation.validMemory(user, memory, machine, on=False)
machine.memory = memory
+ vm_type = validation.validVmType(fields.getfirst('vmtype'))
+ if vm_type is not None:
+ machine.type = vm_type
+
disksize = validation.testDisk(user, fields.getfirst('disk'))
if disksize is not None:
disksize = validation.validDisk(user, disksize, machine)
disksize = validation.testDisk(user, fields.getfirst('disk'))
if disksize is not None:
disksize = validation.validDisk(user, disksize, machine)
checkpoint.checkpoint('Got mem')
max_disk = validation.maxDisk(user, machine)
defaults = Defaults()
checkpoint.checkpoint('Got mem')
max_disk = validation.maxDisk(user, machine)
defaults = Defaults()
- for name in 'machine_id name administrator owner memory contact'.split():
+ for name in 'machine_id name administrator owner memory contact type'.split():
setattr(defaults, name, getattr(machine, name))
defaults.disk = "%0.2f" % (machine.disks[0].size/1024.)
checkpoint.checkpoint('Got defaults')
setattr(defaults, name, getattr(machine, name))
defaults.disk = "%0.2f" % (machine.disks[0].size/1024.)
checkpoint.checkpoint('Got defaults')
+#def vmTypeList($default=None)
+#for $vmtype in $sipb_xen_database.Type.select()
+<label>
+ <input #slurp
+#if $default == $vmtype then 'checked' else ''
+ type="radio" name="vmtype" value="${vmtype.type_id}">${vmtype.description}</input>
+</label>
+#end for
+#end def
+
#def addError(txt)
#if $varExists('txt')
#set global $error_text = $error_text + '----\n' + $txt
#def addError(txt)
#if $varExists('txt')
#set global $error_text = $error_text + '----\n' + $txt
#if $on
(To edit ram, disk size, or machine name, turn off the machine first.)
#end if
#if $on
(To edit ram, disk size, or machine name, turn off the machine first.)
#end if
<form action="modify" method="POST">
<input type="hidden" name="machine_id" value="$defaults.machine_id"/>
<table>
<form action="modify" method="POST">
<input type="hidden" name="machine_id" value="$defaults.machine_id"/>
<table>
#if not $on
<tr><td>Machine Name:</td><td><input type="text" name="name" value="$defaults.name"/></td></tr>
$errorRow('name', $err)
#if not $on
<tr><td>Machine Name:</td><td><input type="text" name="name" value="$defaults.name"/></td></tr>
$errorRow('name', $err)
+ <tr>
+ <td>HVM/ParaVM$helppopup('hvm_paravm')</td>
+ <td>$vmTypeList($defaults.type)</td>
+ </tr>
<tr><td>Ram:</td><td><input type="text" size=3 name="memory" value="$defaults.memory"/>MiB (max $max_mem)</td></tr>
$errorRow('memory', $err)
<tr><td>Disk:</td><td><input type="text" size=3 name="disk" value="$defaults.disk"/>GiB (max $max_disk)</td><td>WARNING: Modifying disk size may corrupt your data.</td></tr>
<tr><td>Ram:</td><td><input type="text" size=3 name="memory" value="$defaults.memory"/>MiB (max $max_mem)</td></tr>
$errorRow('memory', $err)
<tr><td>Disk:</td><td><input type="text" size=3 name="disk" value="$defaults.disk"/>GiB (max $max_disk)</td><td>WARNING: Modifying disk size may corrupt your data.</td></tr>
<td><input type="text" name="disk" value="$defaults.disk" size=3/> GiB (${"%0.1f" % ($max_disk-0.05)} max)</td>
</tr>
$errorRow('disk', $err)
<td><input type="text" name="disk" value="$defaults.disk" size=3/> GiB (${"%0.1f" % ($max_disk-0.05)} max)</td>
</tr>
$errorRow('disk', $err)
- <tr>
- <td>HVM/ParaVM$helppopup('hvm_paravm')</td>
- <td>
-#for $value, $name in (('hvm', 'HVM'), ('paravm', 'ParaVM'))
- <input #slurp
-#if $defaults.vmtype == $value then 'checked' else ''
- type="radio" name="vmtype" value="$value">$name</input>
-#end for
- </td>
- </tr>
+ <tr>
+ <td>HVM/ParaVM$helppopup('hvm_paravm')</td>
+ <td>$vmTypeList($defaults.type)</td>
+ </tr>
$errorRow('vmtype', $err)
<tr>
<td>Boot CD</td>
$errorRow('vmtype', $err)
<tr>
<td>Boot CD</td>
def getMachinesByOwner(user, machine=None):
"""Return the machines owned by the same as a machine.
def getMachinesByOwner(user, machine=None):
"""Return the machines owned by the same as a machine.
If the machine is None, return the machines owned by the same
user.
"""
If the machine is None, return the machines owned by the same
user.
"""
def maxMemory(user, machine=None, on=True):
"""Return the maximum memory for a machine or a user.
def maxMemory(user, machine=None, on=True):
"""Return the maximum memory for a machine or a user.
- If machine is None, return the memory available for a new
+ If machine is None, return the memory available for a new
machine. Else, return the maximum that machine can have.
on is whether the machine should be turned on. If false, the max
machine. Else, return the maximum that machine can have.
on is whether the machine should be turned on. If false, the max
return min(MAX_MEMORY_SINGLE, MAX_MEMORY_TOTAL-mem_usage)
def maxDisk(user, machine=None):
return min(MAX_MEMORY_SINGLE, MAX_MEMORY_TOTAL-mem_usage)
def maxDisk(user, machine=None):
+ """Return the maximum disk that a machine can reach.
+
+ If machine is None, the maximum disk for a new machine. Otherwise,
+ return the maximum that a given machine can be changed to.
+ """
machines = getMachinesByOwner(user, machine)
disk_usage = sum([sum([y.size for y in x.disks])
for x in machines if x != machine])
machines = getMachinesByOwner(user, machine)
disk_usage = sum([sum([y.size for y in x.disks])
for x in machines if x != machine])
if memory < MIN_MEMORY_SINGLE:
raise ValueError
except ValueError:
if memory < MIN_MEMORY_SINGLE:
raise ValueError
except ValueError:
- raise InvalidInput('memory', memory,
+ raise InvalidInput('memory', memory,
"Minimum %s MiB" % MIN_MEMORY_SINGLE)
if memory > maxMemory(user, machine, on):
raise InvalidInput('memory', memory,
"Minimum %s MiB" % MIN_MEMORY_SINGLE)
if memory > maxMemory(user, machine, on):
raise InvalidInput('memory', memory,
return disk
def validVmType(vm_type):
return disk
def validVmType(vm_type):
- if vm_type == 'hvm':
- return Type.get('linux-hvm')
- elif vm_type == 'paravm':
- return Type.get('linux')
- else:
+ if vm_type is None:
+ return None
+ t = Type.get(vm_type)
+ if t is None:
raise CodeError("Invalid vm type '%s'" % vm_type)
raise CodeError("Invalid vm type '%s'" % vm_type)
def testMachineId(user, machine_id, exists=True):
"""Parse, validate and check authorization for a given user and machine.
def testMachineId(user, machine_id, exists=True):
"""Parse, validate and check authorization for a given user and machine.
If exists is False, don't check that it exists.
"""
if machine_id is None:
If exists is False, don't check that it exists.
"""
if machine_id is None:
- raise InvalidInput('machine_id', machine_id,
+ raise InvalidInput('machine_id', machine_id,
"Must specify a machine ID.")
try:
machine_id = int(machine_id)
"Must specify a machine ID.")
try:
machine_id = int(machine_id)
raise InvalidInput('administrator', admin, errmsg)
#XXX Should we require that user is in the admin group?
return admin
raise InvalidInput('administrator', admin, errmsg)
#XXX Should we require that user is in the admin group?
return admin
def testOwner(user, owner, machine=None):
"""Determine whether a user can set the owner of a machine to this value.
def testOwner(user, owner, machine=None):
"""Determine whether a user can set the owner of a machine to this value.