from invirt.config import structs as config
from invirt.database import Machine, Disk, Type, NIC, CDROM, session, meta
from invirt.config import structs as config
from invirt.database import Machine, Disk, Type, NIC, CDROM, session, meta
+def remctl(*args, **kwargs):
+ return gen_remctl(config.remote.hostname,
+ principal='daemon/'+config.web.hostname,
+ *args, **kwargs)
+
def lvcreate(machine, disk):
"""Create a single disk for a machine"""
remctl('web', 'lvcreate', machine.name,
def lvcreate(machine, disk):
"""Create a single disk for a machine"""
remctl('web', 'lvcreate', machine.name,
remctl('control', machine.name, 'install',
'dist=%s' % autoinstall.distribution,
'mirror=%s' % autoinstall.mirror,
remctl('control', machine.name, 'install',
'dist=%s' % autoinstall.distribution,
'mirror=%s' % autoinstall.mirror,
'imagesize=%s' % imagesize)
def lvcopy(machine_orig_name, machine, rootpw):
'imagesize=%s' % imagesize)
def lvcopy(machine_orig_name, machine, rootpw):
machine.contact = contact
machine.uuid = uuidToString(randomUUID())
machine.boot_off_cd = True
machine.contact = contact
machine.uuid = uuidToString(randomUUID())
machine.boot_off_cd = True
session.save_or_update(machine)
disk = Disk(machine=machine,
guest_device_name='hda', size=disksize)
session.save_or_update(machine)
disk = Disk(machine=machine,
guest_device_name='hda', size=disksize)
if not nic: #No IPs left!
raise CodeError("No IP addresses left! "
"Contact %s." % config.web.errormail)
if not nic: #No IPs left!
raise CodeError("No IP addresses left! "
"Contact %s." % config.web.errormail)
session.save_or_update(nic)
session.save_or_update(disk)
cache_acls.refreshMachine(machine)
session.save_or_update(nic)
session.save_or_update(disk)
cache_acls.refreshMachine(machine)
- makeDisks(machine)
- if autoinstall:
- lvinstall(machine, autoinstall)
- else:
- # tell it to boot with cdrom
- bootMachine(machine, cdrom)
+ try:
+ if autoinstall:
+ lvinstall(machine, autoinstall)
+ else:
+ # tell it to boot with cdrom
+ bootMachine(machine, cdrom)
+ except CodeError, e:
+ deleteVM(machine)
+ raise
def deleteVM(machine):
"""Delete a VM."""
remctl('control', machine.name, 'destroy', err=True)
def deleteVM(machine):
"""Delete a VM."""
remctl('control', machine.name, 'destroy', err=True)