mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 02:30:03 +01:00
bitkeeper revision 1.1159.1.329 (4186e250v4q4bACc3tLT1SAh95SQxw)
A coven of new wizards for Xensv (please test). Some of this might need refactoring but it should make the web interface more useful. also: misc version updates, some extra docs stuff.
This commit is contained in:
1 parent
ce404f149a
commit
c22b0ab804
9 files changed
+225
-20
No files matched your search
@@ -16,7 +16,7 @@ class CreateDomain( Wizard ):
|
||||
CreatePage4,
|
||||
CreateFinish ]
|
||||
|
||||
Wizard.__init__( self, urlWriter, "Create Domain Wizard", sheets )
|
||||
Wizard.__init__( self, urlWriter, "Create Domain", sheets )
|
||||
|
||||
class CreatePage0( Sheet ):
|
||||
|
||||
@@ -31,7 +31,8 @@ class CreatePage1( Sheet ):
|
||||
|
||||
def __init__( self, urlWriter ):
|
||||
Sheet.__init__( self, urlWriter, "Setup Kernel Image", 1 )
|
||||
self.addControl( ListControl( 'builder', [('linux', 'Linux'), ('netbsd', 'NetBSD')], 'Kernel Type:' ) )
|
||||
# For now we don't need to select a builder...
|
||||
# self.addControl( ListControl( 'builder', [('linux', 'Linux'), ('netbsd', 'NetBSD')], 'Kernel Type:' ) )
|
||||
self.addControl( FileControl( 'kernel', '/boot/vmlinuz-2.6.9-xenU', 'Kernel Image:' ) )
|
||||
self.addControl( InputControl( 'extra', '', 'Kernel Command Line Parameters:' ) )
|
||||
|
||||
|
||||
@@ -3,6 +3,9 @@ from xen.sv.DomList import DomList
|
||||
from xen.sv.NodeInfo import NodeInfo
|
||||
from xen.sv.DomInfo import DomInfo
|
||||
from xen.sv.CreateDomain import CreateDomain
|
||||
from xen.sv.MigrateDomain import MigrateDomain
|
||||
from xen.sv.SaveDomain import SaveDomain
|
||||
from xen.sv.RestoreDomain import RestoreDomain
|
||||
|
||||
from xen.xend.XendClient import server
|
||||
|
||||
@@ -16,7 +19,14 @@ class Main( HTMLBase ):
|
||||
self.modules = { "node": NodeInfo,
|
||||
"list": DomList,
|
||||
"info": DomInfo,
|
||||
"create": CreateDomain }
|
||||
"create": CreateDomain,
|
||||
"migrate" : MigrateDomain,
|
||||
"save" : SaveDomain,
|
||||
"restore" : RestoreDomain }
|
||||
|
||||
# ordered list of module menus to display
|
||||
self.module_menus = [ "node", "create", "migrate", "save",
|
||||
"restore", "list" ]
|
||||
HTMLBase.__init__(self)
|
||||
|
||||
def render_POST( self, request ):
|
||||
@@ -53,10 +63,10 @@ class Main( HTMLBase ):
|
||||
request.write( " <img src='images/xen.png' width='150' height='75' border='0'/></a><br/></td></tr>" )
|
||||
request.write( " <tr><td height='60px' align='center'><p class='small'>SV Web Interface<br/>(C) <a href='mailto:tw275@cam.ac.uk'>Tom Wilkie</a> 2004</p></td></tr>")
|
||||
request.write( " <tr><td align='center' valign='top'>" )
|
||||
|
||||
for (modName, module) in self.modules.items():
|
||||
module( self.mainUrlWriter( modName ) ).write_MENU( request )
|
||||
|
||||
for modName in self.module_menus:
|
||||
self.modules[modName]( self.mainUrlWriter( modName ) ).write_MENU( request )
|
||||
|
||||
request.write( " </td></tr>" )
|
||||
request.write( " </table>" )
|
||||
request.write( " " )
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
from xen.sv.Wizard import *
|
||||
from xen.sv.util import *
|
||||
from xen.sv.GenTabbed import PreTab
|
||||
|
||||
from xen.xm.create import make_config, OptVals
|
||||
|
||||
from xen.xend.XendClient import server
|
||||
|
||||
class MigrateDomain( Wizard ):
|
||||
def __init__( self, urlWriter ):
|
||||
|
||||
sheets = [ ChooseMigrateDomain,
|
||||
DoMigrate ]
|
||||
|
||||
Wizard.__init__( self, urlWriter, "Migrate Domain", sheets )
|
||||
|
||||
|
||||
class ChooseMigrateDomain( Sheet ):
|
||||
def __init__( self, urlWriter ):
|
||||
Sheet.__init__( self, urlWriter, "Configure Migration", 0)
|
||||
try:
|
||||
domains = server.xend_domains()
|
||||
domains.sort()
|
||||
except:
|
||||
pass
|
||||
|
||||
domnames = []
|
||||
for i in domains:
|
||||
if i != 'Domain-0': domnames.append((i,i))
|
||||
|
||||
self.addControl( ListControl('domid',
|
||||
domnames,
|
||||
'Domain ID:') )
|
||||
self.addControl( TickControl('live',
|
||||
'True',
|
||||
'Live migrate:') )
|
||||
self.addControl( InputControl('rate',
|
||||
'0',
|
||||
'Rate limit:') )
|
||||
self.addControl( InputControl( 'dest', 'myhost.mydomain',
|
||||
'Name or IP address:',
|
||||
".*") )
|
||||
|
||||
class DoMigrate( Sheet ):
|
||||
def __init__(self, urlWriter ):
|
||||
Sheet.__init__(self, urlWriter, "Migration Done", 1)
|
||||
|
||||
def write_BODY( self, request, err ):
|
||||
|
||||
if not self.passback: self.parseForm( request )
|
||||
|
||||
# print string2sxp(self.passback)
|
||||
|
||||
config = ssxp2hash ( string2sxp( self.passback ) )
|
||||
|
||||
try:
|
||||
print config
|
||||
print config['domid'], config['dest']
|
||||
dom_sxp = server.xend_domain_migrate( config['domid'],
|
||||
config['dest'],
|
||||
config.get('live') == 'True',
|
||||
config['rate'] )
|
||||
success = "Your domain was successfully Migrated.\n"
|
||||
except Exception, e:
|
||||
success = "There was an error migrating your domain\n"
|
||||
dom_sxp = str(e)
|
||||
|
||||
pt = PreTab( success + dom_sxp ) # sxp2prettystring( dom_sxp ) )
|
||||
pt.write_BODY( request )
|
||||
|
||||
request.write( "<input type='hidden' name='passback' value=\"%s\"></p>" % self.passback )
|
||||
request.write( "<input type='hidden' name='sheet' value='%s'></p>" % self.location )
|
||||
@@ -0,0 +1,46 @@
|
||||
from xen.sv.Wizard import *
|
||||
from xen.sv.util import *
|
||||
from xen.sv.GenTabbed import PreTab
|
||||
|
||||
from xen.xm.create import make_config, OptVals
|
||||
|
||||
from xen.xend.XendClient import server
|
||||
|
||||
class RestoreDomain( Wizard ):
|
||||
def __init__( self, urlWriter ):
|
||||
|
||||
sheets = [ ChooseRestoreDomain,
|
||||
DoRestore ]
|
||||
|
||||
Wizard.__init__( self, urlWriter, "Restore Domain", sheets )
|
||||
|
||||
|
||||
class ChooseRestoreDomain( Sheet ):
|
||||
def __init__( self, urlWriter ):
|
||||
Sheet.__init__( self, urlWriter, "Configure Restore", 0)
|
||||
|
||||
self.addControl( InputControl( 'file', '',
|
||||
'Suspend file name:',
|
||||
".*") )
|
||||
|
||||
class DoRestore( Sheet ):
|
||||
def __init__(self, urlWriter ):
|
||||
Sheet.__init__(self, urlWriter, "Restore Done", 1)
|
||||
|
||||
def write_BODY( self, request, err ):
|
||||
|
||||
if not self.passback: self.parseForm( request )
|
||||
config = ssxp2hash ( string2sxp( self.passback ) )
|
||||
|
||||
try:
|
||||
dom_sxp = server.xend_domain_restore( config['file'] )
|
||||
success = "Your domain was successfully restored.\n"
|
||||
except Exception, e:
|
||||
success = "There was an error restoring your domain\n"
|
||||
dom_sxp = str(e)
|
||||
|
||||
pt = PreTab( success + sxp2prettystring( dom_sxp ) )
|
||||
pt.write_BODY( request )
|
||||
|
||||
request.write( "<input type='hidden' name='passback' value=\"%s\"></p>" % self.passback )
|
||||
request.write( "<input type='hidden' name='sheet' value='%s'></p>" % self.location )
|
||||
@@ -0,0 +1,59 @@
|
||||
from xen.sv.Wizard import *
|
||||
from xen.sv.util import *
|
||||
from xen.sv.GenTabbed import PreTab
|
||||
|
||||
from xen.xm.create import make_config, OptVals
|
||||
|
||||
from xen.xend.XendClient import server
|
||||
|
||||
class SaveDomain( Wizard ):
|
||||
def __init__( self, urlWriter ):
|
||||
|
||||
sheets = [ ChooseSaveDomain,
|
||||
DoSave ]
|
||||
|
||||
Wizard.__init__( self, urlWriter, "Save Domain", sheets )
|
||||
|
||||
|
||||
class ChooseSaveDomain( Sheet ):
|
||||
def __init__( self, urlWriter ):
|
||||
Sheet.__init__( self, urlWriter, "Configure Save", 0)
|
||||
try:
|
||||
domains = server.xend_domains()
|
||||
domains.sort()
|
||||
except:
|
||||
pass
|
||||
|
||||
domnames = []
|
||||
for i in domains:
|
||||
if i != 'Domain-0': domnames.append((i,i))
|
||||
|
||||
self.addControl( ListControl('domid',
|
||||
domnames,
|
||||
'Domain ID:') )
|
||||
self.addControl( InputControl( 'file', '',
|
||||
'Suspend file name:',
|
||||
".*") )
|
||||
|
||||
class DoSave( Sheet ):
|
||||
def __init__(self, urlWriter ):
|
||||
Sheet.__init__(self, urlWriter, "Save Done", 1)
|
||||
|
||||
def write_BODY( self, request, err ):
|
||||
|
||||
if not self.passback: self.parseForm( request )
|
||||
config = ssxp2hash ( string2sxp( self.passback ) )
|
||||
|
||||
try:
|
||||
dom_sxp = server.xend_domain_save( config['domid'],
|
||||
config['file'] )
|
||||
success = "Your domain was successfully saved.\n"
|
||||
except Exception, e:
|
||||
success = "There was an error saving your domain\n"
|
||||
dom_sxp = str(e)
|
||||
|
||||
pt = PreTab( success + dom_sxp ) # sxp2prettystring( dom_sxp ) )
|
||||
pt.write_BODY( request )
|
||||
|
||||
request.write( "<input type='hidden' name='passback' value=\"%s\"></p>" % self.passback )
|
||||
request.write( "<input type='hidden' name='sheet' value='%s'></p>" % self.location )
|
||||