raise CodeError('"%s" on "control %s create %s'
% (err, machine.name, cdtype))
-def createVm(username, state, owner, contact, name, memory, disksize, machine_type, cdrom, clone_from):
+def createVm(username, state, owner, contact, name, description, memory, disksize, machine_type, cdrom, clone_from):
"""Create a VM and put it in the database"""
# put stuff in the table
transaction = ctx.current.create_transaction()
try:
- validation.Validate(username, state, name=name, owner=owner, memory=memory, disksize=disksize/1024.)
+ validation.Validate(username, state, name=name, description=description, owner=owner, memory=memory, disksize=disksize/1024.)
res = meta.engine.execute('select nextval('
'\'"machines_machine_id_seq"\')')
id = res.fetchone()[0]
machine = Machine()
machine.machine_id = id
machine.name = name
+ machine.description = description
machine.memory = memory
machine.owner = owner
machine.administrator = owner
cdrom = ''
autoinstall = ''
name = ''
+ description = ''
type = 'linux-hvm'
def __init__(self, max_memory=None, max_disk=None, **kws):
return False
def parseCreate(username, state, fields):
- kws = dict([(kw, fields.getfirst(kw)) for kw in 'name owner memory disksize vmtype cdrom clone_from'.split()])
+ kws = dict([(kw, fields.getfirst(kw)) for kw in 'name description owner memory disksize vmtype cdrom clone_from'.split()])
validate = validation.Validate(username, state, strict=True, **kws)
- return dict(contact=username, name=validate.name, memory=validate.memory,
+ return dict(contact=username, name=validate.name, description=validate.description, memory=validate.memory,
disksize=validate.disksize, owner=validate.owner, machine_type=validate.vmtype,
cdrom=getattr(validate, 'cdrom', None),
clone_from=getattr(validate, 'clone_from', None))
olddisk = {}
transaction = ctx.current.create_transaction()
try:
- kws = dict([(kw, fields.getfirst(kw)) for kw in 'machine_id owner admin contact name memory vmtype disksize'.split()])
+ kws = dict([(kw, fields.getfirst(kw)) for kw in 'machine_id owner admin contact name description memory vmtype disksize'.split()])
validate = validation.Validate(username, state, **kws)
machine = validate.machine
oldname = machine.name
update_acl = True
if hasattr(validate, 'name'):
machine.name = validate.name
+ if hasattr(validate, 'description'):
+ machine.description = validate.description
if hasattr(validate, 'admin') and validate.admin != machine.administrator:
machine.administrator = validate.admin
update_acl = True
display_fields = """name uptime memory state cpu_weight on_reboot
on_poweroff on_crash on_xend_start on_xend_stop bootloader""".split()
display_fields = [('name', 'Name'),
+ ('description', 'Description'),
('owner', 'Owner'),
('administrator', 'Administrator'),
('contact', 'Contact'),
fields = []
machine_info = {}
machine_info['name'] = machine.name
+ machine_info['description'] = machine.description
machine_info['type'] = machine.type.hvm and 'HVM' or 'ParaVM'
machine_info['owner'] = machine.owner
machine_info['administrator'] = machine.administrator
checkpoint.checkpoint('Got mem')
max_disk = validation.maxDisk(machine.owner, machine)
defaults = Defaults()
- for name in 'machine_id name administrator owner memory contact'.split():
+ for name in 'machine_id name description administrator owner memory contact'.split():
setattr(defaults, name, getattr(machine, name))
defaults.type = machine.type.type_id
defaults.disk = "%0.2f" % (machine.disks[0].size/1024.)
d = dict(op=op, user=username, fields=fields,
errorMessage=str(err), stderr=emsg, traceback=traceback)
details = templates.error_raw(searchList=[d])
- send_error_mail('xvm error on %s for %s: %s' % (op, username, err),
- details)
d['details'] = details
return templates.error(searchList=[d])
<form action="modify" method="POST">
<input type="hidden" name="machine_id" value="$defaults.machine_id"/>
<table>
+ <tr><td>Description:</td><td colspan="2"><textarea name="description" rows="4" cols="60">$defaults.description</textarea></td></tr>
<tr><td>Owner#slurp
#filter None
$helppopup("Owner")#slurp
$errorRow('name', $err)
#end filter
<tr>
+ <td>Description</td>
+ <td><textarea name="description" rows="4" cols="60">$defaults.description</textarea></td>
+ </tr>
+#filter None
+$errorRow('description', $err)
+#end filter
+ <tr>
<td>Memory</td>
<td><input type="text" name="memory" value="$defaults.memory" size=3/> MiB ($max_memory max)</td>
</tr>
#end filter
#end if
</td>
- <td>
+ <td rowspan="2">
<form action="command" method="post">
<input type="hidden" name="back" value="list"/>
<input type="hidden" name="machine_id"
</form>
</td>
</tr>
+ <tr>
+ <td colspan="7" style="padding-left: 1em; color: #666">$machine.description</td>
+ </tr>
#end def
#def machineList($machines)
MAX_VMS_ACTIVE = 4
class Validate:
- def __init__(self, username, state, machine_id=None, name=None, owner=None,
+ def __init__(self, username, state, machine_id=None, name=None, description=None, owner=None,
admin=None, contact=None, memory=None, disksize=None,
vmtype=None, cdrom=None, clone_from=None, strict=False):
# XXX Successive quota checks aren't a good idea, since you
if strict:
if name is None:
raise InvalidInput('name', name, "You must provide a machine name.")
+ if description is None:
+ raise InvalidInput('description', description, "You must provide a description.")
if memory is None:
raise InvalidInput('memory', memory, "You must provide a memory size.")
if disksize is None:
name = testName(username, name, machine)
if name is not None:
self.name = name
+ description = testDescription(username, description, machine)
+ if description is not None:
+ self.description = description
if memory is not None:
self.memory = validMemory(self.owner, state, memory, machine,
on=not created_new)
return name
raise InvalidInput('name', name, "Name is already taken.")
+def testDescription(user, description, machine=None):
+ if description is None or description.strip() == '':
+ return None
+ return description.strip()
+
def testHostname(user, hostname, machine):
for nic in machine.nics:
if hostname == nic.hostname: