-def parseCreate(user, fields):
- name = fields.getfirst('name')
- if not validation.validMachineName(name):
- raise InvalidInput('name', name, 'You must provide a machine name.')
- name = name.lower()
-
- if Machine.get_by(name=name):
- raise InvalidInput('name', name,
- "Name already exists.")
-
- owner = validation.testOwner(user, fields.getfirst('owner'))
-
- memory = fields.getfirst('memory')
- memory = validation.validMemory(owner, memory, on=True)
-
- disk_size = fields.getfirst('disk')
- disk_size = validation.validDisk(owner, disk_size)
-
- vm_type = fields.getfirst('vmtype')
- if vm_type not in ('hvm', 'paravm'):
- raise CodeError("Invalid vm type '%s'" % vm_type)
- is_hvm = (vm_type == 'hvm')
-
- cdrom = fields.getfirst('cdrom')
- if cdrom is not None and not CDROM.get(cdrom):
- raise CodeError("Invalid cdrom type '%s'" % cdrom)
-
- clone_from = fields.getfirst('clone_from')
- if clone_from and clone_from != 'ice3':
- raise CodeError("Invalid clone image '%s'" % clone_from)
-
- return dict(contact=user, name=name, memory=memory, disk_size=disk_size,
- owner=owner, is_hvm=is_hvm, cdrom=cdrom, clone_from=clone_from)
-
-def create(user, fields):
+def parseCreate(username, state, fields):
+ kws = dict([(kw, fields.getfirst(kw)) for kw in 'name owner memory disksize vmtype cdrom clone_from'.split()])
+ validate = validation.Validate(username, state, **kws)
+ return dict(contact=username, name=validate.name, 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))
+
+def create(username, state, fields):