80af86482d12f1484db28518a0627aa25a8dea0c
[invirt/packages/invirt-database.git] / client / etc / xen / sipb-database
1 # -*- mode: python; -*-
2 import sipb_xen_database.models as models
3 from sipb_xen_database import connect
4 import re
5 import tempfile
6 from subprocess import call
7
8 connect('postgres://sipb-xen@sipb-xen-dev.mit.edu/sipb_xen')
9 prefix = "d_"
10
11 # 'machine_name', and optionally 'cdrom_image', should get passed in
12 # from the xm create call
13
14 def check(b):
15     if not b:
16         import sys
17         sys.exit(1)
18
19 machine = models.Machine.get_by(name=machine_name)
20 check(machine is not None)
21 machine_type = models.Type.get_by(type_id=machine.type_id)
22
23 memory = machine.memory
24 maxmem = memory
25 check(re.match('^[A-Za-z0-9][A-Za-z0-9._-]*$', machine.name))
26 name = prefix + machine.name
27 check(re.match('^[0-9a-f-]+$', machine.uuid))
28 uuid = machine.uuid
29
30 vcpus = machine.cpus
31
32 diskioemu = ""
33 viftype = ""
34
35 if machine_type.hvm:
36     ioemu = "ioemu:"
37     viftype = "type=ioemu, "
38
39     kernel = 'hvmloader'
40     builder = 'hvm'
41     vnc = 1
42     vncpasswd = 'moocow'
43     device_model = '/usr/sbin/qemu-dm-sipb'
44 else:
45     kernel  = '/boot/vmlinuz-2.6.18-5-xen-amd64'
46     ramdisk = '/boot/initrd.img-2.6.18-5-xen-amd64'
47     builder = 'linux'
48
49 pae = machine_type.pae
50 acpi = machine_type.acpi
51 apic = machine_type.apic
52
53 vif = []
54
55 for n in machine.nics:
56     check(re.match('^[0-9a-fA-F:]+$', n.mac_addr) and re.match('^[0-9.]*$', n.ip))
57     d = '%smac=%s, ip=%s, bridge=xenbr0, script=vif-sipbroute' % (viftype, n.mac_addr, n.ip)
58     vif.append(d)
59
60 disk = []
61
62 for d in machine.disks:
63     check(re.match('^[A-Za-z0-9]+$', d.guest_device_name))
64     device = '/dev/xenvg/' + prefix + machine.name + '_' + d.guest_device_name
65     dspec = 'phy:%s,%s%s,w' % (device, diskioemu, d.guest_device_name)
66     disk.append(dspec)
67
68 if 'installer' in locals():
69     check(re.match('^[A-Za-z0-9][A-Za-z0-9_.-]*$', installer))
70     tmptree = tempfile.mkdtemp('', 'auto-install.', '/tmp')
71     call(['/usr/sbin/sipb-xen-make-iso', installer, tmptree]
72          + installer_options.split(' '))
73     disk.append('file:'+tmptree+'/install.iso,hdc:cdrom,r')
74     boot = 'd'
75
76 elif 'disks' in locals(): # for the copying installer's use
77     disk = disks.split(' ')
78     boot = 'c'
79
80 elif 'cdrom_image' in locals():
81     check(re.match('^[A-Za-z0-9][A-Za-z0-9_.-]*$', cdrom_image))
82     disk.append('file:/srv/images/' + cdrom_image + '.iso,hdc:cdrom,r')
83     boot = 'd'
84
85 usbdevice = 'tablet'
86
87 on_poweroff = 'destroy'
88 on_reboot = 'restart'
89 on_crash = 'destroy'
90 if machine.autorestart:
91     on_crash = 'restart'