fix typo
[invirt/packages/invirt-xen-config.git] / invirt-database
index 4f793ed..94efd05 100644 (file)
@@ -2,8 +2,6 @@
 from invirt.database import models, connect
 from invirt.config import structs as config
 import re
-import tempfile
-from subprocess import call
 
 connect()
 prefix = "d_"
@@ -16,20 +14,24 @@ def check(b):
         import sys
         sys.exit(1)
 
-machine = models.Machine.query().filter_by(name=machine_name).one()
+machine = models.Machine.query.filter_by(name=machine_name).one()
 check(machine is not None)
 machine_type = machine.type
 cdrom = None
 if 'cdrom_image' in locals():
-    cdrom = models.CDROM.query().filter_by(cdrom_id=cdrom_image).one()
+    cdrom = models.CDROM.query.filter_by(cdrom_id=cdrom_image).one()
     check(cdrom is not None)
 
 memory = machine.memory
-maxmem = memory
+if machine_type.hvm:
+    # Disable populate-on-demand
+    maxmem = memory
+else:
+    maxmem = '2048'
 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
 
@@ -48,43 +50,87 @@ if machine_type.hvm:
     codepath = 'hvm'
 else:
     codepath = 'paravm'
+    if machine_type.type_id == 'linux-pvgrub':
+        use_pvgrub = True
+    else:
+        use_pvgrub = False
 
 if 'installer_options' in locals(): #Installer
-    disk.append('phy:/dev/xenvg/s_install_hda,hdb,r')
-
-    kernel = '/boot/vmlinuz-2.6.24-19-xen' #From hardy
-    ramdisk = '/boot/initrd.img-2.6.24-19-xen'
-
-    if not machine.nics:
-        raise RuntimeError('You must have a nic to autoinstall')
-    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))
-    extra += ' %s' % installer_options
-    root = '/dev/hdb1'
+    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"
+
+        import urllib
+        class MyUrlOpener(urllib.FancyURLopener):
+            def http_error_default(self, req, fp, code, msg, hdrs):
+                raise IOError("%s %s" % (code, msg))
+        urlopener = MyUrlOpener()
+
+        try:
+            print "Fetching %s" % kernelurl
+            kernel, _ = urlopener.retrieve(kernelurl)
+            print "Fetching %s" % ramdiskurl
+            ramdisk, _ = urlopener.retrieve(ramdiskurl)
+        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')
+
+        import os
+        release = os.uname()[2]
+        kernel = '/boot/vmlinuz-%s' % release
+        ramdisk = '/boot/initrd.img-%s' % release
+
+        if not machine.nics:
+            raise RuntimeError('You must have a nic to autoinstall')
+        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))
+        extra += ' %s' % installer_options
+        root = '/dev/hdb1'
     codepath = None
+
+    memory = max(memory, 512)
 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
-    vncpasswd = 'moocow'
     device_model = '/usr/sbin/qemu-dm-invirt'
     serial = "pty"
 elif codepath == 'paravm':
-    bootloader = '/usr/bin/pygrub'
-
+    if use_pvgrub:
+        kernel = '/usr/lib/grub/grub.xen'
+    else:
+        bootloader = '/usr/bin/pygrub'
 
 for n in machine.nics:
     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' % (viftype, n.mac_addr, n.ip)
+    if n.nic_type:
+        viftype = viftype.replace("pcnet", n.nic_type)
+    d = ('%smac=%s, ip=%s, script=vif-invirtroute netdev=%s'
+         % (viftype, n.mac_addr, n.ip, config.xen.iface))
     vif.append(d)
 
 for d in machine.disks: