From bbec77c6bd300144f1a222cc686917625a1b4d23 Mon Sep 17 00:00:00 2001 From: Eric Price Date: Mon, 8 Oct 2007 04:44:14 -0400 Subject: [PATCH] More updates. svn path=/trunk/web/; revision=144 --- templates/VncViewer.jar | Bin 62026 -> 0 bytes templates/command.tmpl | 4 +-- templates/info.tmpl | 4 +-- templates/list.tmpl | 27 ++++++++------ templates/main.py | 92 +++++++++++++++++++++++++++++++++++------------ 5 files changed, 90 insertions(+), 37 deletions(-) delete mode 100644 templates/VncViewer.jar diff --git a/templates/VncViewer.jar b/templates/VncViewer.jar deleted file mode 100644 index af710dcdaf1ead04ae71ecb7b142a910c10944cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62026 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 diff --git a/templates/command.tmpl b/templates/command.tmpl index d7a6890..4ea55a5 100644 --- a/templates/command.tmpl +++ b/templates/command.tmpl @@ -7,9 +7,9 @@ $command $machine.name #def body -

Command succesful

+

Command successful

$command ${machine.name} was successful.

-#if $command == "Delete VM" +#if $command == "Delete VM" or True

Return

#else

Return

diff --git a/templates/info.tmpl b/templates/info.tmpl index 9f014f2..f537dd2 100644 --- a/templates/info.tmpl +++ b/templates/info.tmpl @@ -68,8 +68,8 @@ Info on $machine.name Hostname:.servers.csail.mit.edu #end if #if not $on - Ram:MB (max $maxmem) - Disk:GB (max $maxdisk) + Ram:MB (max $max_mem) + Disk:GB (max $max_disk) #end if diff --git a/templates/list.tmpl b/templates/list.tmpl index 19b108e..a27fe0b 100644 --- a/templates/list.tmpl +++ b/templates/list.tmpl @@ -20,7 +20,7 @@ List of your VMs Hostname Uptime VNC - Restart? + #for $machine in $machines: $machine.name @@ -37,32 +37,35 @@ List of your VMs #end if #slurp -#if $uptimes.get($machine.name) -$uptimes[$machine.name]#slurp +#if $uptimes[$machine] +$uptimes[$machine]#slurp #else Off#slurp #end if #slurp -#if $has_vnc.get($machine.name) == True +#if $has_vnc[$machine] == True Console#slurp #else -$has_vnc.get($machine.name) +$has_vnc[$machine] #end if
- +#if $uptimes[$machine] + +#else + +#end if
#end for #end if - +#if $can_add_vm

Create a new VM:

@@ -72,11 +75,11 @@ $has_vnc.get($machine.name) - + - + @@ -101,5 +104,7 @@ $has_vnc.get($machine.name)
Memory megabytes ($maxmem max) megabytes ($max_mem max)
Disk gigabytes ($maxdisk max) gigabytes (${"%0.1f" % ($max_disk-0.05)} max)
HVM/ParaVM$helppopup('hvm_paravm')
- +#else +

You are at the maximum number of VMs.

+#end if #end def diff --git a/templates/main.py b/templates/main.py index 642490f..c997710 100755 --- a/templates/main.py +++ b/templates/main.py @@ -41,11 +41,39 @@ def uuidToString(u): return "-".join(["%02x" * 4, "%02x" * 2, "%02x" * 2, "%02x" * 2, "%02x" * 6]) % tuple(u) -def maxMemory(user, machine=None): - return 256 +MAX_MEMORY_TOTAL = 512 +MAX_MEMORY_SINGLE = 256 +MIN_MEMORY_SINGLE = 16 +MAX_DISK_TOTAL = 50 +MAX_DISK_SINGLE = 50 +MIN_DISK_SINGLE = 0.1 +MAX_VMS_TOTAL = 10 +MAX_VMS_ACTIVE = 4 + +def getMachinesOwner(owner): + return Machine.select_by(owner=owner) + +def maxMemory(user, machine=None, on=None): + machines = getMachinesOwner(user.username) + if on is None: + on = getUptimes(machines) + active_machines = [x for x in machines if on[x]] + mem_usage = sum([x.memory for x in active_machines if x != machine]) + return min(MAX_MEMORY_SINGLE, MAX_MEMORY_TOTAL-mem_usage) def maxDisk(user, machine=None): - return 10.0 + machines = getMachinesOwner(user.username) + disk_usage = sum([sum([y.size for y in x.disks]) + for x in machines if x != machine]) + return min(MAX_DISK_SINGLE, MAX_DISK_TOTAL-disk_usage/1024.) + +def canAddVm(user, on=None): + machines = getMachinesOwner(user.username) + if on is None: + on = getUptimes(machines) + active_machines = [x for x in machines if on[x]] + return (len(machines) < MAX_VMS_TOTAL and + len(active_machines) < MAX_VMS_ACTIVE) def haveAccess(user, machine): if user.username == 'moo': @@ -94,10 +122,11 @@ def remctl(*args, **kws): stdout=subprocess.PIPE, stderr=subprocess.PIPE) if kws.get('err'): + p.wait() return p.stdout.read(), p.stderr.read() if p.wait(): - print >> sys.stderr, 'ERROR on remctl ', args - print >> sys.stderr, p.stderr.read() + raise MyException('ERROR on remctl %s: %s' % + (args, p.stderr.read())) return p.stdout.read() def makeDisks(): @@ -158,7 +187,10 @@ def getUptimes(machines): name, id = lst[:2] uptime = ' '.join(lst[2:]) d[name] = uptime - return d + ans = {} + for m in machines: + ans[m] = d.get(m.name) + return ans def statusInfo(machine): """Return the status list for a given machine. @@ -190,6 +222,12 @@ def createVm(user, name, memory, disk, is_hvm, cdrom): # put stuff in the table transaction = ctx.current.create_transaction() try: + if memory > maxMemory(user): + raise MyException("Too much memory requested") + if disk > maxDisk(user) * 1024: + raise MyException("Too much disk requested") + if not canAddVm(user): + raise MyException("Too many VMs requested") res = meta.engine.execute('select nextval(\'"machines_machine_id_seq"\')') id = res.fetchone()[0] machine = Machine() @@ -217,8 +255,8 @@ def createVm(user, name, memory, disk, is_hvm, cdrom): except: transaction.rollback() raise - makeDisks() registerMachine(machine) + makeDisks() # tell it to boot with cdrom bootMachine(machine, cdrom) @@ -227,10 +265,11 @@ def createVm(user, name, memory, disk, is_hvm, cdrom): def validMemory(user, memory, machine=None): try: memory = int(memory) - if memory <= 0: + if memory < MIN_MEMORY_SINGLE: raise ValueError except ValueError: - raise MyException("Invalid memory amount") + raise MyException("Invalid memory amount; must be at least %s MB" % + MIN_MEMORY_SINGLE) if memory > maxMemory(user, machine): raise MyException("Too much memory requested") return memory @@ -241,10 +280,11 @@ def validDisk(user, disk, machine=None): if disk > maxDisk(user, machine): raise MyException("Too much disk requested") disk = int(disk * 1024) - if disk <= 0: + if disk < MIN_DISK_SINGLE * 1024: raise ValueError except ValueError: - raise MyException("Invalid disk amount") + raise MyException("Invalid disk amount; minimum is %s GB" % + MIN_DISK_SINGLE) return disk def create(user, fields): @@ -286,19 +326,24 @@ def listVms(user, fields): uptimes = getUptimes(machines) on = uptimes for m in machines: - if not on.get(m.name): - has_vnc[m.name] = 'Off' + if not on[m]: + has_vnc[m] = 'Off' elif m.type.hvm: - has_vnc[m.name] = True + has_vnc[m] = True else: - has_vnc[m.name] = "ParaVM"+helppopup("paravm_console") + has_vnc[m] = "ParaVM"+helppopup("paravm_console") # for m in machines: # status = statusInfo(m) # on[m.name] = status is not None # has_vnc[m.name] = hasVnc(status) + max_mem=maxMemory(user, on=on) + max_disk=maxDisk(user) d = dict(user=user, - maxmem=maxMemory(user), - maxdisk=maxDisk(user), + can_add_vm=canAddVm(user, on=on), + max_mem=max_mem, + max_disk=max_disk, + default_mem=max_mem, + default_disk=min(4.0, max_disk), machines=machines, has_vnc=has_vnc, uptimes=uptimes, @@ -417,6 +462,8 @@ def command(user, fields): else: remctl('reboot', machine.name) elif action == 'Power on': + if maxMemory(user) < machine.memory: + raise MyException("You don't have enough free RAM quota") bootMachine(machine, cdrom) elif action == 'Power off': remctl('destroy', machine.name) @@ -514,7 +561,8 @@ def info(user, fields): else: pass #fields.append((disp, None)) - + max_mem = maxMemory(user, machine) + max_disk = maxDisk(user, machine) d = dict(user=user, cdroms=CDROM.select(), on=status is not None, @@ -522,8 +570,8 @@ def info(user, fields): has_vnc=has_vnc, uptime=str(uptime), ram=machine.memory, - maxmem=maxMemory(user, machine), - maxdisk=maxDisk(user, machine), + max_mem=max_mem, + max_disk=max_disk, fields = fields) print Template(file='info.tmpl', searchList=[d, global_dict]) @@ -548,8 +596,8 @@ if __name__ == '__main__': u.username = username u.email = os.environ[ 'SSL_CLIENT_S_DN_Email'] else: - u.username = 'nobody' - u.email = None + u.username = 'moo' + u.email = 'nobody' connect('postgres://sipb-xen@sipb-xen-dev/sipb_xen') operation = os.environ.get('PATH_INFO', '') #print 'Content-Type: text/plain\n' -- 1.7.9.5