import simplejson
import sys
import time
+import urllib
from StringIO import StringIO
def revertStandardError():
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, Autoinstall
import validation
+import cache_acls
from webcommon import InvalidInput, CodeError, g
import controls
checkpoint = Checkpoint()
+def jquote(string):
+ return "'" + string.replace('\\', '\\\\').replace("'", "\\'").replace('\n', '\\n') + "'"
def helppopup(subj):
"""Return HTML code for a (?) link to a specified help topic"""
- return ('<span class="helplink"><a href="help?subject=' + subj +
- '&simple=true" target="_blank" ' +
- 'onclick="return helppopup(\'' + subj + '\')">(?)</a></span>')
+ return ('<span class="helplink"><a href="help?' +
+ cgi.escape(urllib.urlencode(dict(subject=subj, simple='true')))
+ +'" target="_blank" ' +
+ 'onclick="return helppopup(' + cgi.escape(jquote(subj)) + ')">(?)</a></span>')
def makeErrorPre(old, addition):
if addition is None:
else:
return '<p>STDERR:</p><pre>' + str(addition) + '</pre>'
+Template.sipb_xen_database = sipb_xen_database
Template.helppopup = staticmethod(helppopup)
Template.err = None
memory = 256
disk = 4.0
cdrom = ''
+ autoinstall = ''
name = ''
- vmtype = 'hvm'
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:
defaults=defaults,
machines=machines,
has_vnc=has_vnc,
- uptimes=g.uptimes,
- cdroms=CDROM.select())
+ uptimes=g.uptimes)
return d
def listVms(user, fields):
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)
disk.size = disksize
ctx.current.save(disk)
- if owner is not None:
+ update_acl = False
+ if owner is not None and owner != machine.owner:
machine.owner = owner
+ update_acl = True
if name is not None:
machine.name = name
- if admin is not None:
+ if admin is not None and admin != machine.administrator:
machine.administrator = admin
+ update_acl = True
if contact is not None:
machine.contact = contact
ctx.current.save(machine)
+ if update_acl:
+ cache_acls.refreshMachine(machine)
transaction.commit()
except:
transaction.rollback()
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')
d = dict(user=user,
- cdroms=CDROM.select(),
on=status is not None,
machine=machine,
defaults=defaults,