source: trunk/packages/xen-3.1/xen-3.1/tools/python/xen/sv/CreateDomain.py @ 34

Last change on this file since 34 was 34, checked in by hartmans, 18 years ago

Add xen and xen-common

  • Property svn:executable set to *
File size: 7.8 KB
Line 
1from xen.sv.Wizard import *
2from xen.sv.util import *
3from xen.sv.GenTabbed import PreTab
4
5from xen.xm.create import make_config, OptVals
6
7from xen.xend.XendClient import server
8
9class CreateDomain( Wizard ):
10    def __init__( self, urlWriter ):
11       
12        sheets = [ CreatePage0,
13                   CreatePage1,
14                   CreatePage2,
15                   CreatePage3,
16                   CreatePage4,
17                   CreateFinish ]
18   
19        Wizard.__init__( self, urlWriter, "Create Domain", sheets )
20
21    def op_finish( self, request ):
22        pass
23   
24class CreatePage0( Sheet ):
25
26    title = "General"
27   
28    def __init__( self, urlWriter ):
29        Sheet.__init__( self, urlWriter, "General", 0 )
30        self.addControl( InputControl( 'name', 'VM Name', 'VM Name:', "[\\w|\\S]+", "You must enter a name in this field" ) )
31        self.addControl( InputControl( 'memory', '64', 'Memory (Mb):', "[\\d]+", "You must enter a number in this field" ) )
32        self.addControl( InputControl( 'cpu', '0', 'CPU:', "[\\d]+", "You must enter a number in this feild" ) )
33        self.addControl( InputControl( 'cpu_weight', '1', 'CPU Weight:', "[\\d]+", "You must enter a number in this feild" ) )
34        self.addControl( InputControl( 'vcpus', '1', 'Virtual CPUs:', '[\\d]+', "You must enter a number in this feild") )
35                       
36class CreatePage1( Sheet ):
37
38    title = "Setup Kernel Image"
39
40    def __init__( self, urlWriter ):
41        Sheet.__init__( self, urlWriter, "Setup Kernel Image", 1 )
42        self.addControl( ListControl( 'builder', [('linux', 'Linux'), ('netbsd', 'NetBSD')], 'Domain Builder:' ) )
43        self.addControl( FileControl( 'kernel', '/boot/vmlinuz-2.6.12-xenU', 'Kernel Image:' ) )
44        self.addControl( InputControl( 'extra', '', 'Kernel Command Line Parameters:' ) )
45        self.addControl( ListControl( 'use-initrd', [('yes', 'Yes'), ('no', 'No')], 'Use an Initial Ram Disk?:' ) )
46        self.addControl( FileControl( 'initrd', '/boot/initrd-2.6.12-xenU.img', 'Initial Ram Disk:' ) )
47
48    def validate( self, request ):
49        if not self.passback: self.parseForm( request )
50        check = True
51        request.write( previous_values.get( '>>>>>use-initrd' ) )
52        previous_values = ssxp2hash( string2sxp( self.passback ) ) #get the map for quick reference
53        if DEBUG: print previous_values
54        for (feild, control) in self.feilds:
55            if feild == 'initrd' and previous_values.get( 'use-initrd' ) != 'no':
56                request.write( previous_values.get( '>>>>>use-initrd' ) )
57                if control.validate( previous_values.get( feild ) ):
58                    check = False
59            elif not control.validate( previous_values.get( feild ) ):
60                check = False
61
62            if DEBUG: print "> %s = %s" % (feild, previous_values.get( feild ))
63
64        return check
65                                                 
66
67class CreatePage2( Sheet ):
68
69    title = "Choose number of VBDS"
70
71    def __init__( self, urlWriter ):
72        Sheet.__init__( self, urlWriter, "Setup Virtual Block Device", 2 )
73        self.addControl( InputControl( 'num_vbds', '1', 'Number of VBDs:', '[\\d]+', "You must enter a number in this field" ) )
74
75class CreatePage3( Sheet ):
76
77    title = "Setup VBDS"
78
79    def __init__( self, urlWriter ):
80        Sheet.__init__( self, urlWriter, "Setup Virtual Block Device", 3 )
81       
82    def write_BODY( self, request ):
83        if not self.passback: self.parseForm( request )
84   
85        previous_values = sxp2hash( string2sxp( self.passback ) ) #get the hash for quick reference
86       
87        num_vbds = previous_values.get( 'num_vbds' )
88       
89        for i in range( int( num_vbds ) ):
90            self.addControl( InputControl( 'vbd%s_dom0' % i, 'phy:sda%s' % str(i + 1), 'Device %s name:' % i  ) )
91            self.addControl( InputControl( 'vbd%s_domU' % i, 'sda%s' % str(i + 1), 'Virtualized device %s:' % i ) )
92            self.addControl( ListControl( 'vbd%s_mode' % i, [('w', 'Read + Write'), ('r', 'Read Only')], 'Device %s mode:' % i ) )
93           
94        self.addControl( InputControl( 'root', '/dev/sda1', 'Root device (in VM):' ) )
95       
96        Sheet.write_BODY( self, request )
97               
98class CreatePage4( Sheet ):
99
100    title = "Network Setting"
101
102    def __init__( self, urlWriter ):       
103        Sheet.__init__( self, urlWriter, "Network settings", 4 )
104        self.addControl( ListControl( 'dhcp', [('off', 'No'), ('dhcp', 'Yes')], 'Use DHCP:' ) )
105        self.addControl( InputControl( 'hostname', 'hostname', 'VM Hostname:' ) )
106        self.addControl( InputControl( 'ip_addr', '1.2.3.4', 'VM IP Address:' ) )
107        self.addControl( InputControl( 'ip_subnet', '255.255.255.0', 'VM Subnet Mask:' ) ) 
108        self.addControl( InputControl( 'ip_gateway', '1.2.3.4', 'VM Gateway:' ) )           
109        self.addControl( InputControl( 'ip_nfs', '1.2.3.4', 'NFS Server:' ) ) 
110                 
111class CreateFinish( Sheet ):
112
113    title = "Finish"
114
115    def __init__( self, urlWriter ):
116        Sheet.__init__( self, urlWriter, "All Done", 5 )
117       
118    def write_BODY( self, request ):
119   
120        if not self.passback: self.parseForm( request )
121       
122        xend_sxp = self.translate_sxp( string2sxp( self.passback ) )
123
124        request.write( "<pre>%s</pre>" % sxp2prettystring( xend_sxp ) )
125       
126        try:
127            server.xend_domain_create( xend_sxp )
128            request.write( "<p>You domain had been successfully created.</p>" )
129        except Exception, e:
130            request.write( "<p>There was an error creating your domain.<br/>The configuration used is as follows:\n</p>" )
131            request.write( "<pre>%s</pre>" % sxp2prettystring( xend_sxp ) )
132            request.write( "<p>The error was:</p>" )
133            request.write( "<pre>%s</pre>" % str( e ) )
134
135        request.write( "<input type='hidden' name='passback' value=\"%s\"></p>" % self.passback )
136        request.write( "<input type='hidden' name='sheet' value='%s'></p>" % self.location )
137   
138    def translate_sxp( self, fin_sxp ):
139        fin_hash = ssxp2hash( fin_sxp )
140   
141        def get( key ):
142            ret = fin_hash.get( key )
143            if ret:
144                return ret
145            else:
146                return ""
147       
148        vals = OptVals()
149       
150        vals.name =     get( 'name' )
151        vals.memory =   get( 'memory' )
152        vals.maxmem =   get( 'maxmem' )
153        vals.cpu =      get( 'cpu' )
154        vals.cpu_weight = get( 'cpu_weight' )
155        vals.vcpus = get( 'vcpus' )
156       
157        vals.builder =  get( 'builder' )       
158        vals.kernel =   get( 'kernel' )
159        vals.root =     get( 'root' )
160        vals.extra =    get( 'extra' )
161       
162        #setup vbds
163       
164        vbds = []
165       
166        for i in range( int( get( 'num_vbds' ) ) ):
167            vbds.append( ( get( 'vbd%s_dom0' % i ), get('vbd%s_domU' % i ), get( 'vbd%s_mode' % i ), None ) )
168       
169        vals.disk = vbds   
170           
171        #misc
172       
173        vals.pci = []
174       
175        vals.blkif = None
176        vals.netif = None
177        vals.restart = None
178        vals.console = None
179        vals.ramdisk = None
180        vals.ssidref = -1
181        vals.bootloader = None
182        vals.usb = []
183        vals.acpi = []
184       
185        #setup vifs
186       
187        vals.vif = []
188        vals.nics = 1
189               
190        ip =   get( 'ip_addr' )
191        nfs =  get( 'ip_nfs' )
192        gate = get( 'ip_gateway' )
193        mask = get( 'ip_subnet' )
194        host = get( 'hostname' )
195        dhcp = get( 'dhcp' )
196       
197        vals.cmdline_ip = "%s:%s:%s:%s:%s:eth0:%s" % (ip, nfs, gate, mask, host, dhcp)
198
199        opts = None
200       
201        try:
202            return make_config( opts, vals )
203        except Exception, e:
204            return [["There was an error creating the domain config SXP.  This is typically due to an interface change in xm/create.py:make_config", e]]   
205       
Note: See TracBrowser for help on using the repository browser.