X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-xen-config.git/blobdiff_plain/cef218592a26d5aa8497ea1f06371c1083874123..d9e021a59bc7d64e3dc357e1528a4e27189d1778:/invirt-database?ds=sidebyside diff --git a/invirt-database b/invirt-database index 92600e7..98ede48 100644 --- a/invirt-database +++ b/invirt-database @@ -1,5 +1,5 @@ # -*- mode: python; -*- -from invirt.database import models, connect +from invirt.database import models, connect, session from invirt.config import structs as config import re @@ -23,11 +23,15 @@ if 'cdrom_image' in locals(): check(cdrom is not None) memory = machine.memory -maxmem = '2048' +if machine_type.hvm: + # Disable populate-on-demand + maxmem = memory +else: + maxmem = max(memory, 4096) check(re.match('^[A-Za-z0-9][A-Za-z0-9._-]*$', machine.name)) -name = prefix + machine.name +name = prefix + machine_name check(re.match('^[0-9a-f-]+$', machine.uuid)) -uuid = machine.uuid +uuid = str(machine.uuid) vcpus = machine.cpus @@ -50,10 +54,31 @@ else: 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): @@ -69,14 +94,6 @@ if 'installer_options' in locals(): #Installer 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') @@ -91,21 +108,23 @@ if 'installer_options' in locals(): #Installer 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': + xen_platform_pci = 1 ioemu = "ioemu:" - viftype = "type=ioemu, " - kernel = '/usr/lib/xen/boot/hvmloader' + viftype = "model=pcnet, " + kernel = '/usr/lib/xen-4.1/boot/hvmloader' builder = 'hvm' vnc = 1 device_model = '/usr/sbin/qemu-dm-invirt' @@ -115,9 +134,28 @@ elif codepath == 'paravm': 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: