# -*- mode: python; -*-
-from invirt.database import models, connect
+from invirt.database import models, connect, session
from invirt.config import structs as config
import re
# Disable populate-on-demand
maxmem = memory
else:
- maxmem = '2048'
+ maxmem = max(memory, 4096)
check(re.match('^[A-Za-z0-9][A-Za-z0-9._-]*$', machine.name))
name = prefix + machine_name
check(re.match('^[0-9a-f-]+$', machine.uuid))
-uuid = machine.uuid
+uuid = str(machine.uuid)
vcpus = machine.cpus
if 'installer_options' in locals(): #Installer
import shlex
install = dict(x.split("=",1) for x in shlex.split(installer_options))
- if 'preseed' in install: # d-i based installer
- baseurl = install['mirror']+"/dists/"+install['dist']+"/main/installer-"+install['arch']+"/current/images"
- kernelurl = baseurl + "/netboot/xen/vmlinuz"
- ramdiskurl = baseurl + "/netboot/xen/initrd.gz"
+ if 'ks' in install or 'preseed' in install:
+ if 'ks' in install: # anaconda based installer
+ baseurl = install['mirror']+"/releases/"+install['dist']+"/Everything/"+install['arch']+"/os"
+ kernelurl = baseurl + "/images/pxeboot/vmlinuz"
+ ramdiskurl = baseurl + "/images/pxeboot/initrd.img"
+ extras = ["inst.text",
+ "inst.repo="+baseurl,
+ "inst.ks="+install['ks'],
+ "--", "console=hvc0",
+ ]
+ elif 'preseed' in install: # d-i based installer
+ baseurl = install['mirror']+"/dists/"+install['dist']+"/main/installer-"+install['arch']+"/current/images"
+ kernelurl = baseurl + "/netboot/xen/vmlinuz"
+ ramdiskurl = baseurl + "/netboot/xen/initrd.gz"
+
+ # For debugging, add "DEBCONF_DEBUG=5" to the arguments.
+ extras = ["auto=true",
+ "debconf/priority=critical",
+ 'preseed/early_command="grep -v tty0 /etc/inittab >/etc/inittab.new; mv -f /etc/inittab.new /etc/inittab"',
+ "debian-installer/locale=en_US.UTF-8",
+ "debian-installer/exit/always_halt=true",
+ "url="+install['preseed'],
+ "--", "console=hvc0"]
+ else:
+ raise RuntimeError('unknown new-style autoinstall')
import urllib
class MyUrlOpener(urllib.FancyURLopener):
except IOError, _:
raise
- # For debugging, add "DEBCONF_DEBUG=5" to the arguments.
- extras = ["auto=true",
- "debconf/priority=critical",
- "debian-installer/locale=en_US.UTF-8",
- "debian-installer/exit/always_halt=true",
- "url="+install['preseed'],
- "--", "console=hvc0"]
-
extra = str.join(" ", extras)
else: # Traditional debootstrap-based install
disk.append('phy:/dev/xenvg/s_install_hda,hdb,r')
n = machine.nics[0]
extra = 'ro noresume'
extra += (' ip=%s::%s:%s:%s:eth0:off'
- % (n.ip, config.dhcp.gateway, config.dhcp.netmask, machine.name))
+ % (n.ip, n.gateway, n.netmask, machine.name))
extra += ' %s' % installer_options
root = '/dev/hdb1'
codepath = None
- memory = max(memory, 512)
+ memory = max(memory, 768)
+ maxmem = memory
elif cdrom is not None:
disk.append('phy:/dev/xenvg/image_' + cdrom.cdrom_id + ',hdc:cdrom,r')
boot = 'd'
codepath = 'hvm'
if codepath == 'hvm':
- # Disable PVHVM for now until we figure out the best way to do this
- xen_platform_pci = 0
+ xen_platform_pci = 1
ioemu = "ioemu:"
- viftype = "type=ioemu,model=pcnet, "
+ viftype = "model=pcnet, "
kernel = '/usr/lib/xen-4.1/boot/hvmloader'
builder = 'hvm'
vnc = 1
for n in machine.nics:
+ other_netparams = ''
+ other_action = n.other_action if n.other_action else ''
+ if other_action == 'renumber':
+ (n.ip, n.netmask, n.gateway,
+ n.other_ip, n.other_netmask, n.other_gateway) = (
+ n.other_ip, n.other_netmask, n.other_gateway,
+ n.ip, n.netmask, n.gateway)
+ other_action = n.other_action = 'dnat'
+ session.add(n)
+ session.flush()
+ if other_action == 'dnat':
+ other_netparams = ('other_ip=%s other_gateway=%s'
+ % (n.other_ip, n.other_gateway))
+ if other_action == 'remove':
+ n.other_ip = n.other_netmask = n.other_gateway = n.other_action = None
+ session.add(n)
+ session.flush()
check(re.match('^[0-9a-fA-F:]+$', n.mac_addr) and re.match('^[0-9.]*$', n.ip))
- d = ('%smac=%s, ip=%s, script=vif-invirtroute netdev=%s'
- % (viftype, n.mac_addr, n.ip, config.xen.iface))
+ if n.nic_type:
+ viftype = viftype.replace("pcnet", n.nic_type)
+ d = ('%smac=%s, ip=%s, script=vif-invirtroute netdev=%s gateway=%s %s'
+ % (viftype, n.mac_addr, n.ip, config.xen.iface, n.gateway, other_netparams))
vif.append(d)
for d in machine.disks: