aboutsummaryrefslogtreecommitdiffstats
path: root/tools/python
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2013-07-31 16:15:57 +0100
committerIan Campbell <ian.campbell@citrix.com>2013-08-20 15:39:58 +0100
commit484a3711b42261f3a82e21bf5164a7021d52356f (patch)
treea9ca31a692cd94083924fce48f35662b7c9ffd66 /tools/python
parent76c66c689b8591a8d185586cdd8a1bbbf393ffb6 (diff)
downloadxen-484a3711b42261f3a82e21bf5164a7021d52356f.tar.gz
xen-484a3711b42261f3a82e21bf5164a7021d52356f.tar.bz2
xen-484a3711b42261f3a82e21bf5164a7021d52356f.zip
tools: drop 'sv'
I'm not even sure what this thing is. Looks like some sort of Twisted Python based frontend to xend. Whatever it is I am perfectly sure no one can be using it. Apart from drive by build fixes caused by updates elsewhere it has seen no real development since 2005. I suspect it was never even finished/usable. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'tools/python')
-rw-r--r--tools/python/setup.py1
-rwxr-xr-xtools/python/xen/sv/CreateDomain.py205
-rwxr-xr-xtools/python/xen/sv/DomInfo.py268
-rwxr-xr-xtools/python/xen/sv/GenTabbed.py147
-rwxr-xr-xtools/python/xen/sv/HTMLBase.py53
-rwxr-xr-xtools/python/xen/sv/Main.py82
-rwxr-xr-xtools/python/xen/sv/NodeInfo.py73
-rwxr-xr-xtools/python/xen/sv/RestoreDomain.py50
-rwxr-xr-xtools/python/xen/sv/Wizard.py245
-rwxr-xr-xtools/python/xen/sv/__init__.py1
-rwxr-xr-xtools/python/xen/sv/util.py126
11 files changed, 0 insertions, 1251 deletions
diff --git a/tools/python/setup.py b/tools/python/setup.py
index 8e584e6398..8127b21fdf 100644
--- a/tools/python/setup.py
+++ b/tools/python/setup.py
@@ -132,7 +132,6 @@ setup(name = 'xen',
description = 'Xen',
packages = ['xen',
'xen.lowlevel',
- 'xen.sv',
] + xend_packages,
ext_package = "xen.lowlevel",
ext_modules = modules
diff --git a/tools/python/xen/sv/CreateDomain.py b/tools/python/xen/sv/CreateDomain.py
deleted file mode 100755
index 748d99bca2..0000000000
--- a/tools/python/xen/sv/CreateDomain.py
+++ /dev/null
@@ -1,205 +0,0 @@
-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 CreateDomain( Wizard ):
- def __init__( self, urlWriter ):
-
- sheets = [ CreatePage0,
- CreatePage1,
- CreatePage2,
- CreatePage3,
- CreatePage4,
- CreateFinish ]
-
- Wizard.__init__( self, urlWriter, "Create Domain", sheets )
-
- def op_finish( self, request ):
- pass
-
-class CreatePage0( Sheet ):
-
- title = "General"
-
- def __init__( self, urlWriter ):
- Sheet.__init__( self, urlWriter, "General", 0 )
- self.addControl( InputControl( 'name', 'VM Name', 'VM Name:', "[\\w|\\S]+", "You must enter a name in this field" ) )
- self.addControl( InputControl( 'memory', '64', 'Memory (Mb):', "[\\d]+", "You must enter a number in this field" ) )
- self.addControl( InputControl( 'cpu', '0', 'CPU:', "[\\d]+", "You must enter a number in this feild" ) )
- self.addControl( InputControl( 'cpu_weight', '1', 'CPU Weight:', "[\\d]+", "You must enter a number in this feild" ) )
- self.addControl( InputControl( 'vcpus', '1', 'Virtual CPUs:', '[\\d]+', "You must enter a number in this feild") )
-
-class CreatePage1( Sheet ):
-
- title = "Setup Kernel Image"
-
- def __init__( self, urlWriter ):
- Sheet.__init__( self, urlWriter, "Setup Kernel Image", 1 )
- self.addControl( ListControl( 'builder', [('linux', 'Linux'), ('netbsd', 'NetBSD')], 'Domain Builder:' ) )
- self.addControl( FileControl( 'kernel', '/boot/vmlinuz-2.6.12-xenU', 'Kernel Image:' ) )
- self.addControl( InputControl( 'extra', '', 'Kernel Command Line Parameters:' ) )
- self.addControl( ListControl( 'use-initrd', [('yes', 'Yes'), ('no', 'No')], 'Use an Initial Ram Disk?:' ) )
- self.addControl( FileControl( 'initrd', '/boot/initrd-2.6.12-xenU.img', 'Initial Ram Disk:' ) )
-
- def validate( self, request ):
- if not self.passback: self.parseForm( request )
- check = True
- request.write( previous_values.get( '>>>>>use-initrd' ) )
- previous_values = ssxp2hash( string2sxp( self.passback ) ) #get the map for quick reference
- if DEBUG: print previous_values
- for (feild, control) in self.feilds:
- if feild == 'initrd' and previous_values.get( 'use-initrd' ) != 'no':
- request.write( previous_values.get( '>>>>>use-initrd' ) )
- if control.validate( previous_values.get( feild ) ):
- check = False
- elif not control.validate( previous_values.get( feild ) ):
- check = False
-
- if DEBUG: print "> %s = %s" % (feild, previous_values.get( feild ))
-
- return check
-
-
-class CreatePage2( Sheet ):
-
- title = "Choose number of VBDS"
-
- def __init__( self, urlWriter ):
- Sheet.__init__( self, urlWriter, "Setup Virtual Block Device", 2 )
- self.addControl( InputControl( 'num_vbds', '1', 'Number of VBDs:', '[\\d]+', "You must enter a number in this field" ) )
-
-class CreatePage3( Sheet ):
-
- title = "Setup VBDS"
-
- def __init__( self, urlWriter ):
- Sheet.__init__( self, urlWriter, "Setup Virtual Block Device", 3 )
-
- def write_BODY( self, request ):
- if not self.passback: self.parseForm( request )
-
- previous_values = sxp2hash( string2sxp( self.passback ) ) #get the hash for quick reference
-
- num_vbds = previous_values.get( 'num_vbds' )
-
- for i in range( int( num_vbds ) ):
- self.addControl( InputControl( 'vbd%s_dom0' % i, 'phy:sda%s' % str(i + 1), 'Device %s name:' % i ) )
- self.addControl( InputControl( 'vbd%s_domU' % i, 'sda%s' % str(i + 1), 'Virtualized device %s:' % i ) )
- self.addControl( ListControl( 'vbd%s_mode' % i, [('w', 'Read + Write'), ('r', 'Read Only')], 'Device %s mode:' % i ) )
-
- self.addControl( InputControl( 'root', '/dev/sda1', 'Root device (in VM):' ) )
-
- Sheet.write_BODY( self, request )
-
-class CreatePage4( Sheet ):
-
- title = "Network Setting"
-
- def __init__( self, urlWriter ):
- Sheet.__init__( self, urlWriter, "Network settings", 4 )
- self.addControl( ListControl( 'dhcp', [('off', 'No'), ('dhcp', 'Yes')], 'Use DHCP:' ) )
- self.addControl( InputControl( 'hostname', 'hostname', 'VM Hostname:' ) )
- self.addControl( InputControl( 'ip_addr', '192.168.1.1', 'VM IP Address:' ) )
- self.addControl( InputControl( 'ip_subnet', '255.255.255.0', 'VM Subnet Mask:' ) )
- self.addControl( InputControl( 'ip_gateway', '192.168.1.1', 'VM Gateway:' ) )
- self.addControl( InputControl( 'ip_nfs', '192.168.1.1', 'NFS Server:' ) )
-
-class CreateFinish( Sheet ):
-
- title = "Finish"
-
- def __init__( self, urlWriter ):
- Sheet.__init__( self, urlWriter, "All Done", 5 )
-
- def write_BODY( self, request ):
-
- if not self.passback: self.parseForm( request )
-
- xend_sxp = self.translate_sxp( string2sxp( self.passback ) )
-
- request.write( "<pre>%s</pre>" % sxp2prettystring( xend_sxp ) )
-
- try:
- server.xend_domain_create( xend_sxp )
- request.write( "<p>You domain had been successfully created.</p>" )
- except Exception, e:
- request.write( "<p>There was an error creating your domain.<br/>The configuration used is as follows:\n</p>" )
- request.write( "<pre>%s</pre>" % sxp2prettystring( xend_sxp ) )
- request.write( "<p>The error was:</p>" )
- request.write( "<pre>%s</pre>" % str( e ) )
-
- request.write( "<input type='hidden' name='passback' value=\"%s\"></p>" % self.passback )
- request.write( "<input type='hidden' name='sheet' value='%s'></p>" % self.location )
-
- def translate_sxp( self, fin_sxp ):
- fin_hash = ssxp2hash( fin_sxp )
-
- def get( key ):
- ret = fin_hash.get( key )
- if ret:
- return ret
- else:
- return ""
-
- vals = OptVals()
-
- vals.name = get( 'name' )
- vals.memory = get( 'memory' )
- vals.maxmem = get( 'maxmem' )
- vals.cpu = get( 'cpu' )
- vals.cpu_weight = get( 'cpu_weight' )
- vals.vcpus = get( 'vcpus' )
-
- vals.builder = get( 'builder' )
- vals.kernel = get( 'kernel' )
- vals.root = get( 'root' )
- vals.extra = get( 'extra' )
-
- #setup vbds
-
- vbds = []
-
- for i in range( int( get( 'num_vbds' ) ) ):
- vbds.append( ( get( 'vbd%s_dom0' % i ), get('vbd%s_domU' % i ), get( 'vbd%s_mode' % i ), None ) )
-
- vals.disk = vbds
-
- #misc
-
- vals.pci = []
-
- vals.blkif = None
- vals.netif = None
- vals.restart = None
- vals.console = None
- vals.ramdisk = None
- vals.ssidref = -1
- vals.bootloader = None
- vals.usb = []
- vals.acpi = []
-
- #setup vifs
-
- vals.vif = []
- vals.nics = 1
-
- ip = get( 'ip_addr' )
- nfs = get( 'ip_nfs' )
- gate = get( 'ip_gateway' )
- mask = get( 'ip_subnet' )
- host = get( 'hostname' )
- dhcp = get( 'dhcp' )
-
- vals.cmdline_ip = "%s:%s:%s:%s:%s:eth0:%s" % (ip, nfs, gate, mask, host, dhcp)
-
- opts = None
-
- try:
- return make_config( opts, vals )
- except Exception, e:
- 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]]
-
diff --git a/tools/python/xen/sv/DomInfo.py b/tools/python/xen/sv/DomInfo.py
deleted file mode 100755
index 89feca01a5..0000000000
--- a/tools/python/xen/sv/DomInfo.py
+++ /dev/null
@@ -1,268 +0,0 @@
-from xen.xend.XendClient import server
-from xen.xend import PrettyPrint
-
-from xen.sv.HTMLBase import HTMLBase
-from xen.sv.util import *
-from xen.sv.GenTabbed import *
-from xen.sv.Wizard import *
-
-DEBUG=1
-
-class DomInfo( GenTabbed ):
-
- def __init__( self, urlWriter ):
-
- self.dom = 0;
-
- GenTabbed.__init__( self, "Domain Info", urlWriter, [ 'General', 'SXP', 'Devices', 'Migrate', 'Save' ], [ DomGeneralTab, DomSXPTab, DomDeviceTab, DomMigrateTab, DomSaveTab ] )
-
- def write_BODY( self, request ):
- try:
- dom = int( getVar( 'dom', request ) )
- except:
- request.write( "<p>Please Select a Domain</p>" )
- return None
-
- GenTabbed.write_BODY( self, request )
-
- def write_MENU( self, request ):
- domains = []
-
- try:
- domains = server.xend_domains()
- domains.sort()
- except:
- pass
-
- request.write( "\n<table style='border:0px solid white' cellspacing='0' cellpadding='0' border='0' width='100%'>\n" )
- request.write( "<tr class='domainInfoHead'>" )
- request.write( "<td class='domainInfoHead' align='center'>Domain</td>\n" )
- request.write( "<td class='domainInfoHead' align='center'>Name</td>\n" )
- request.write( "<td class='domainInfoHead' align='center'>State</td>\n" )
- request.write( "<td class='domainInfoHead' align='center'></td>\n" )
- request.write( "</tr>" )
-
- odd = True
- if not domains is None:
- for domain in domains:
- odd = not odd;
- if odd:
- request.write( "<tr class='domainInfoOdd'>\n" )
- else:
- request.write( "<tr class='domainInfoEven'>\n" )
- domInfo = getDomInfo( domain )
- request.write( "<td class='domainInfo' align='center'>%(id)s</td>\n" % domInfo )
- url = self.urlWriter( "&dom=%(id)s" % domInfo )
- request.write( "<td class='domainInfo' align='center'><a href='%s'>%s</a></td>\n" % ( url, domInfo['name'] ) )
- request.write( "<td class='domainInfo' align='center'>%(state)5s</td>\n" % domInfo )
- if domInfo[ 'id' ] != "0":
- request.write( "<td class='domainInfo' align='center'>" )
- if domInfo[ 'state' ][ 2 ] == "-":
- request.write( "<img src='images/small-pause.png' onclick='doOp2( \"pause\", \"%(dom)-4s\" )'>" % domInfo )
- else:
- request.write( "<img src='images/small-unpause.png' onclick='doOp2( \"unpause\", \"%(dom)-4s\" )'>" % domInfo )
- request.write( "<img src='images/small-destroy.png' onclick='doOp2( \"destroy\", \"%(dom)-4s\" )'></td>" % domInfo )
- else:
- request.write( "<td>&nbsp;</td>" )
- request.write( "</tr>\n" )
- else:
- request.write( "<tr colspan='10'><p class='small'>Error getting domain list<br/>Perhaps XenD not running?</p></tr>")
- request.write( "</table>" )
-
-class DomGeneralTab( CompositeTab ):
- def __init__( self, urlWriter ):
- CompositeTab.__init__( self, [ DomGenTab, DomActionTab ], urlWriter )
-
-class DomGenTab( GeneralTab ):
-
- def __init__( self, _ ):
-
- titles = {}
-
- titles[ 'ID' ] = 'dom'
- titles[ 'Name' ] = 'name'
- titles[ 'CPU' ] = 'cpu'
- titles[ 'Memory' ] = ( 'mem', memoryFormatter )
- titles[ 'State' ] = ( 'state', stateFormatter )
- titles[ 'Total CPU' ] = ( 'cpu_time', smallTimeFormatter )
- titles[ 'Up Time' ] = ( 'up_time', bigTimeFormatter )
-
- GeneralTab.__init__( self, {}, titles )
-
- def write_BODY( self, request ):
-
- self.dom = getVar('dom', request)
-
- if self.dom is None:
- request.write( "<p>Please Select a Domain</p>" )
- return None
-
- self.dict = getDomInfo( self.dom )
-
- GeneralTab.write_BODY( self, request )
-
-class DomSXPTab( PreTab ):
-
- def __init__( self, _ ):
- self.dom = 0
- PreTab.__init__( self, "" )
-
-
- def write_BODY( self, request ):
- self.dom = getVar('dom', request)
-
- if self.dom is None:
- request.write( "<p>Please Select a Domain</p>" )
- return None
-
- try:
- domInfo = server.xend_domain( self.dom )
- except:
- domInfo = [["Error getting domain details."]]
-
- self.source = sxp2prettystring( domInfo )
-
- PreTab.write_BODY( self, request )
-
-class DomActionTab( ActionTab ):
-
- def __init__( self, _ ):
- actions = { "shutdown" : "Shutdown",
- "reboot" : "Reboot",
- "pause" : "Pause",
- "unpause" : "Unpause",
- "destroy" : "Destroy" }
- ActionTab.__init__( self, actions )
-
- def op_shutdown( self, request ):
- dom = getVar( 'dom', request )
- if not dom is None and dom != '0':
- if DEBUG: print ">DomShutDown %s" % dom
- try:
- server.xend_domain_shutdown( int( dom ), "poweroff" )
- except:
- pass
-
- def op_reboot( self, request ):
- dom = getVar( 'dom', request )
- if not dom is None and dom != '0':
- if DEBUG: print ">DomReboot %s" % dom
- try:
- server.xend_domain_shutdown( int( dom ), "reboot" )
- except:
- pass
-
- def op_pause( self, request ):
- dom = getVar( 'dom', request )
- if not dom is None and dom != '0':
- if DEBUG: print ">DomPause %s" % dom
- try:
- server.xend_domain_pause( int( dom ) )
- except:
- pass
-
- def op_unpause( self, request ):
- dom = getVar( 'dom', request )
- if not dom is None and dom != '0':
- if DEBUG: print ">DomUnpause %s" % dom
- try:
- server.xend_domain_unpause( int( dom ) )
- except:
- pass
-
- def op_destroy( self, request ):
- dom = getVar( 'dom', request )
- if not dom is None and dom != '0':
- if DEBUG: print ">DomDestroy %s" % dom
- try:
- server.xend_domain_destroy(int( dom ))
- except:
- pass
-
-class DomDeviceTab( CompositeTab ):
-
- def __init__( self, urlWriter ):
- CompositeTab.__init__( self, [ DomDeviceListTab, DomDeviceOptionsTab, DomDeviceActionTab ], urlWriter )
-
-class DomDeviceListTab( NullTab ):
-
- title = "Device List"
-
- def __init__( self, _ ):
- pass
-
-class DomDeviceOptionsTab( NullTab ):
-
- title = "Device Options"
-
- def __init__( self, _ ):
- pass
-
-class DomDeviceActionTab( ActionTab ):
-
- def __init__( self, _ ):
- ActionTab.__init__( self, { "addvcpu" : "Add VCPU", "addvbd" : "Add VBD", "addvif" : "Add VIF" } )
-
-class DomMigrateTab( CompositeTab ):
-
- def __init__( self, urlWriter ):
- CompositeTab.__init__( self, [ DomMigrateExtraTab, DomMigrateActionTab ], urlWriter )
-
-class DomMigrateExtraTab( Sheet ):
-
- def __init__( self, urlWriter ):
- Sheet.__init__( self, urlWriter, "Configure Migration", 0)
- self.addControl( TickControl('live', 'True', 'Live migrate:') )
- self.addControl( InputControl('rate', '0', 'Rate limit:') )
- self.addControl( InputControl( 'dest', 'host.domain', 'Name or IP address:', ".*") )
-
-class DomMigrateActionTab( ActionTab ):
-
- def __init__( self, _ ):
- actions = { "migrate" : "Migrate" }
- ActionTab.__init__( self, actions )
-
- def op_migrate( self, request ):
- try:
- domid = int( getVar( 'dom', request ) )
- live = getVar( 'live', request )
- rate = getVar( 'rate', request )
- dest = getVar( 'dest', request )
- dom_sxp = server.xend_domain_migrate( domid, dest, live == 'True', rate )
- success = "Your domain was successfully Migrated.\n"
- except Exception, e:
- success = "There was an error migrating your domain\n"
- dom_sxp = str(e)
-
-class DomSaveTab( CompositeTab ):
-
- def __init__( self, urlWriter ):
- CompositeTab.__init__( self, [ DomSaveExtraTab, DomSaveActionTab ], urlWriter )
-
-class DomSaveExtraTab( Sheet ):
-
- title = "Save location"
-
- def __init__( self, urlWriter ):
- Sheet.__init__( self, urlWriter, "Save Domain to file", 0 )
- self.addControl( InputControl( 'file', '', 'Suspend file name:', ".*") )
-
-class DomSaveActionTab( ActionTab ):
-
- def __init__( self, _ ):
- actions = { "save" : "Save" }
- ActionTab.__init__( self, actions )
-
- def op_save( self, request ):
-
- 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)
-
- try:
- dom = int( getVar( 'dom', request ) )
- except:
- pass
diff --git a/tools/python/xen/sv/GenTabbed.py b/tools/python/xen/sv/GenTabbed.py
deleted file mode 100755
index 6631663f15..0000000000
--- a/tools/python/xen/sv/GenTabbed.py
+++ /dev/null
@@ -1,147 +0,0 @@
-import types
-
-from xen.sv.HTMLBase import HTMLBase
-from xen.sv.util import getVar
-
-class GenTabbed( HTMLBase ):
-
- def __init__( self, title, urlWriter, tabStrings, tabObjects ):
- HTMLBase.__init__(self)
- self.tabStrings = tabStrings
- self.tabObjects = tabObjects
- self.urlWriter = urlWriter
- self.title = title
-
- def write_BODY( self, request ):
- if not self.__dict__.has_key( "tab" ):
- try:
- self.tab = int( getVar( 'tab', request, 0 ) )
- except:
- self.tab = 0
-
- request.write( "\n<div class='title'>%s</div>" % self.title )
-
- TabView( self.tab, self.tabStrings, self.urlWriter ).write_BODY( request )
-
- try:
- request.write( "\n<div class='tab'>" )
- render_tab = self.tabObjects[ self.tab ]
- render_tab( self.urlWriter ).write_BODY( request )
- request.write( "\n</div>" )
- except Exception, e:
- request.write( "\n<p>Error Rendering Tab</p>" )
- request.write( "\n<p>%s</p>" % str( e ) )
-
- request.write( "\n<input type=\"hidden\" name=\"tab\" value=\"%d\">" % self.tab )
-
- def perform( self, request ):
- request.write( "Tab> perform" )
- request.write( "<br/>op: " + str( getVar( 'op', request ) ) )
- request.write( "<br/>args: " + str( getVar( 'args', request ) ) )
- request.write( "<br/>tab: " + str( getVar( 'tab', request ) ) )
-
- try:
- action = getVar( 'op', request, 0 )
- if action == "tab":
- self.tab = int( getVar( 'args', request ) )
- else:
- this.tab = int( getVar( 'tab', request, 0 ) )
- self.tabObjects[ self.tab ]( self.urlWriter ).perform( request )
- except:
- pass
-
-class PreTab( HTMLBase ):
-
- def __init__( self, source ):
- HTMLBase.__init__( self )
- self.source = source
-
- def write_BODY( self, request ):
- request.write( "\n<pre>" )
- request.write( self.source )
- request.write( "\n</pre>" )
-
-class GeneralTab( HTMLBase ):
-
- def __init__( self, dict, titles ):
- HTMLBase.__init__( self )
- self.dict = dict
- self.titles = titles
-
- def write_BODY( self, request ):
-
- request.write( "\n<table width='100%' cellspacing='0' cellpadding='0' border='0'>" )
-
- def writeAttr( niceName, attr, formatter=None ):
- if type( attr ) is types.TupleType:
- ( attr, formatter ) = attr
-
- if attr in self.dict:
- if formatter:
- temp = formatter( self.dict[ attr ] )
- else:
- temp = str( self.dict[ attr ] )
- request.write( "\n<tr><td width='50%%'><p>%s:</p></td><td width='50%%'><p>%s</p></td></tr>" % ( niceName, temp ) )
-
- for niceName, attr in self.titles.items():
- writeAttr( niceName, attr )
-
- request.write( "</table>" )
-
-class NullTab( HTMLBase ):
-
- def __init__( self, title="Null Tab" ):
- HTMLBase.__init__( self )
- self.title = title
-
- def write_BODY( self, request ):
- request.write( "\n<p>%s</p>" % self.title )
-
-class ActionTab( HTMLBase ):
-
- def __init__( self, actions ):
- self.actions = actions
- HTMLBase.__init__( self )
-
- def write_BODY( self, request ):
- for item in self.actions.items():
- try:
- ((op, attr), title) = item
- except:
- (op, title) = item
- attr = ""
- request.write( "\n<div class='button' onclick=\"doOp2( '%s', '%s' )\">%s</a></div>" % (op, attr, title) )
-
-class CompositeTab( HTMLBase ):
-
- def __init__( self, tabs, urlWriter ):
- HTMLBase.__init__( self )
- self.tabs = tabs
- self.urlWriter = urlWriter
-
- def write_BODY( self, request ):
- for tab in self.tabs:
- tab( self.urlWriter ).write_BODY( request )
-
- def perform( self, request ):
- for tab in self.tabs:
- tab( self.urlWriter ).perform( request )
-
-class TabView( HTMLBase ):
-
- # tab - int, id into tabs of selected tab
- # tabs - list of strings, tab names
- # urlWriter -
- def __init__( self, tab, tabs, urlWriter ):
- HTMLBase.__init__(self)
- self.tab = tab
- self.tabs = tabs
- self.urlWriter = urlWriter
-
- def write_BODY( self, request ):
- for i in range( len( self.tabs ) ):
- if self.tab == i:
- at = " id='activeTab'"
- else:
- at = ""
- request.write( "\n<div%s class='tabButton' onclick=\"doOp2( 'tab', '%d' )\">%s</div>" % ( at, i, self.tabs[ i ] ) )
diff --git a/tools/python/xen/sv/HTMLBase.py b/tools/python/xen/sv/HTMLBase.py
deleted file mode 100755
index d0fca13a98..0000000000
--- a/tools/python/xen/sv/HTMLBase.py
+++ /dev/null
@@ -1,53 +0,0 @@
-from xen.sv.util import *
-
-class HTMLBase:
-
- isLeaf = True
-
- def __init__( self ):
- pass
-
- def render_POST( self, request ):
- self.perform( request )
- return self.render_GET( request )
-
- def render_GET( self, request ):
- pass
-
- def write_BODY( self, request ):
- pass
-
- def write_TOP( self, request ):
- pass
-
- def write_BOTTOM( self, request ):
- pass
-
- def get_op_method(self, op):
- """Get the method for an operation.
- For operation 'foo' looks for 'op_foo'.
-
- op operation name
- returns method or None
- """
- op_method_name = 'op_' + op
- return getattr(self, op_method_name, None)
-
- def perform(self, req):
- """General operation handler for posted operations.
- For operation 'foo' looks for a method op_foo and calls
- it with op_foo(req). Replies with code 500 if op_foo
- is not found.
-
- The method must return a list when req.use_sxp is true
- and an HTML string otherwise (or list).
- Methods may also return a Deferred (for incomplete processing).
-
- req request
- """
- op = req.args.get('op')
- if not op is None and len(op) == 1:
- op = op[0]
- op_method = self.get_op_method(op)
- if op_method:
- op_method( req )
diff --git a/tools/python/xen/sv/Main.py b/tools/python/xen/sv/Main.py
deleted file mode 100755
index ea62af11ea..0000000000
--- a/tools/python/xen/sv/Main.py
+++ /dev/null
@@ -1,82 +0,0 @@
-
-from xen.sv.NodeInfo import NodeInfo
-from xen.sv.DomInfo import DomInfo
-from xen.sv.CreateDomain import CreateDomain
-from xen.sv.RestoreDomain import RestoreDomain
-
-from xen.sv.util import getVar
-
-# adapter to make this all work with mod_python
-# as opposed to Twisted
-# (c) Tom Wilkie 2005
-
-class Args:
- def __init__( self, req ):
- from mod_python.util import FieldStorage
- self.fieldStorage = FieldStorage( req, True )
-
- # return a list of values for the given key,
- # or None if key not there
- def get( self, var ):
- retVar = self.fieldStorage.getlist( var )
- if len( retVar ) == 0:
- return None
- else:
- return retVar
-
- # return a list of tuples,
- # (key, value) where value is a list of values
- def items( self ):
- result = [];
- for key in self.fieldStorage.keys():
- result.append( (key, self.fieldStorage.getlist( key ) ) )
- return result
-
-# This is the Main class
-# It pieces together all the modules
-
-class Main:
- def __init__( self ):
- self.modules = { "node": NodeInfo,
- "create": CreateDomain,
- "restore" : RestoreDomain,
- "info": DomInfo }
-
- self.init_done = False
-
- def init_modules( self, request ):
- for moduleName, module in self.modules.iteritems():
- self.modules[ moduleName ] = module( self.urlWriter( moduleName, request.url ) )
-
- def render_menu( self, request ):
- if not self.init_done:
- self.init_modules( request )
- self.init_done = True
-
- for _, module in self.modules.iteritems():
- module.write_MENU( request )
- request.write( "\n" )
-
- def render_main( self, request ):
- if not self.init_done:
- self.init_modules( request )
- self.init_done = True
-
- moduleName = getVar('mod', request)
- if moduleName not in self.modules:
- request.write( '<p>Please select a module</p>' )
- else:
- module = self.modules[ moduleName ]
- module.write_BODY( request )
-
- def do_POST( self, request ):
- if not self.init_done:
- self.init_modules( request )
- self.init_done = True
-
- moduleName = getVar( 'mod', request )
- if moduleName in self.modules:
- self.modules[ moduleName ].perform( request )
-
- def urlWriter( self, module, url ):
- return lambda x: "%s?mod=%s%s" % ( url, module, x )
diff --git a/tools/python/xen/sv/NodeInfo.py b/tools/python/xen/sv/NodeInfo.py
deleted file mode 100755
index f8b47b1d4f..0000000000
--- a/tools/python/xen/sv/NodeInfo.py
+++ /dev/null
@@ -1,73 +0,0 @@
-from xen.xend.XendClient import server
-
-from xen.sv.util import *
-from xen.sv.GenTabbed import *
-
-class NodeInfo( GenTabbed ):
-
- def __init__( self, urlWriter ):
- GenTabbed.__init__( self, "Node Details", urlWriter, [ 'General', 'Dmesg', 'SXP' ], [ NodeGeneralTab, NodeDmesgTab, NodeSXPTab ] )
-
- def write_MENU( self, request ):
- request.write( "<p class='small'><a href='%s'>Node details</a></p>" % self.urlWriter( '' ) )
-
-class NodeGeneralTab( CompositeTab ):
- def __init__( self, urlWriter ):
- CompositeTab.__init__( self, [ NodeInfoTab, NodeActionTab ], urlWriter )
-
-class NodeInfoTab( GeneralTab ):
-
- def __init__( self, urlWriter ):
-
- nodeInfo = {}
- try:
- nodeInfo = sxp2hash( server.xend_node() )
- except:
- nodeInfo[ 'system' ] = 'Error getting node info'
-
- dictTitles = {}
- dictTitles[ 'System' ] = 'system'
- dictTitles[ 'Hostname' ] = 'host'
- dictTitles[ 'Release' ] = 'release'
- dictTitles[ 'Version' ] ='version'
- dictTitles[ 'Machine' ] = 'machine'
- dictTitles[ 'Cores' ] = 'cores'
- dictTitles[ 'Hyperthreading' ] = ( 'hyperthreads_per_core', hyperthreadFormatter )
- dictTitles[ 'CPU Speed' ] = ( 'cpu_mhz', cpuFormatter )
- dictTitles[ 'Memory' ] = ( 'memory', memoryFormatter )
- dictTitles[ 'Free Memory' ] = ( 'free_memory', memoryFormatter )
-
- GeneralTab.__init__( self, dict=nodeInfo, titles=dictTitles )
-
-class NodeDmesgTab( PreTab ):
-
- def __init__( self, urlWriter ):
- try:
- dmesg = server.xend_node_get_dmesg()
- except:
- dmesg = "Error getting node information: XenD not running?"
- PreTab.__init__( self, dmesg )
-
-class NodeActionTab( ActionTab ):
-
- def __init__( self, urlWriter ):
- ActionTab.__init__( self, { "shutdown" : "shutdown",
- "reboot" : "reboot" } )
-
- def op_shutdown( self, request ):
- if debug: print ">NodeShutDown"
- server.xend_node_shutdown()
-
- def op_reboot( self, request ):
- if debug: print ">NodeReboot"
- server.xend_node_reboot()
-
-class NodeSXPTab( PreTab ):
-
- def __init__( self, urlWriter ):
- try:
- nodeSXP = sxp2string( server.xend_node() )
- except:
- nodeSXP = 'Error getting node sxp'
-
- PreTab.__init__( self, nodeSXP )
diff --git a/tools/python/xen/sv/RestoreDomain.py b/tools/python/xen/sv/RestoreDomain.py
deleted file mode 100755
index b836a43579..0000000000
--- a/tools/python/xen/sv/RestoreDomain.py
+++ /dev/null
@@ -1,50 +0,0 @@
-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 ):
- title = "Configure Restore"
-
- def __init__( self, urlWriter ):
- Sheet.__init__( self, urlWriter, "Configure Restore", 0)
-
- self.addControl( InputControl( 'file', '',
- 'Suspend file name:',
- ".*") )
-
-class DoRestore( Sheet ):
- title = "Restore Done"
-
- 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 )
diff --git a/tools/python/xen/sv/Wizard.py b/tools/python/xen/sv/Wizard.py
deleted file mode 100755
index c4ac53b761..0000000000
--- a/tools/python/xen/sv/Wizard.py
+++ /dev/null
@@ -1,245 +0,0 @@
-from xen.sv.util import *
-from xen.sv.HTMLBase import HTMLBase
-from xen.sv.GenTabbed import GenTabbed, ActionTab
-from xen.xend import sxp
-
-import re
-
-DEBUG = 0
-
-class Wizard( GenTabbed ):
-
- def __init__( self, urlWriter, title, sheets ):
- self.title = title
- self.sheets = sheets
- self.urlWriter = urlWriter
- self.offset = 0
- GenTabbed.__init__( self, title, urlWriter, map( lambda x: x.title, sheets ), sheets )
-
- def write_MENU( self, request ):
- request.write( "<p class='small'><a href='%s'>%s</a></p>" % (self.urlWriter( '' ), self.title) )
-
- def write_BODY( self, request ):
- GenTabbed.write_BODY( self, request )
- actionTab = ActionTab( { ("tab", str(self.tab-1)) : "< Prev", ("tab", str(self.tab+1)) : "Next >", "finish" : "Finish" } )
- actionTab.write_BODY( request )
-
- def perform( self, request ):
- try:
- action = getVar( 'op', request, 0 )
- if action == "tab":
- self.tab = int( getVar( 'args', request ) )
- oldtab = int( getVar( 'tab', request ) )
- if not self.tabObjects[ oldtab ]( self.urlWriter ).validate( request ):
- self.tab = oldtab
- else:
- self.tab = int( getVar( 'tab', request, 0 ) )
- self.tabObjects[ self.tab ]( self.urlWriter ).perform( request )
- getattr( self, "op_" + getVar( "op", request ), None )( request )
- except:
- pass
-
- def op_finish( self, request ):
- pass
-
-class Sheet( HTMLBase ):
-
- def __init__( self, urlWriter, title, location ):
- HTMLBase.__init__( self )
- self.urlWriter = urlWriter
- self.fields = []
- self.title = title
- self.location = location
- self.passback = None
-
- def parseForm( self, request ):
- do_not_parse = [ 'mod', 'op', 'passback' ]
-
- passed_back = request.args
-
- temp_passback = passed_back.get( "passback" )
-
- if temp_passback is not None and len( temp_passback ) > 0:
- temp_passback = temp_passback[ len( temp_passback )-1 ]
- else:
- temp_passback = "( )"
-
- last_passback = ssxp2hash( string2sxp( temp_passback ) ) #use special function - will work with no head on sxp
-
- if DEBUG: print last_passback
-
- for (key, value) in passed_back.items():
- if key not in do_not_parse:
- last_passback[ key ] = value[ len( value ) - 1 ]
-
- self.passback = sxp2string( hash2sxp( last_passback ) ) #store the sxp
-
- if DEBUG: print self.passback
-
- def write_BODY( self, request ):
-
- if not self.passback: self.parseForm( request )
-
- request.write( "<p>%s</p>" % self.title )
-
- previous_values = ssxp2hash( string2sxp( self.passback ) ) #get the hash for quick reference
-
- request.write( "<table width='100%' cellpadding='0' cellspacing='1' border='0'>" )
-
- for (field, control) in self.fields:
- control.write_Control( request, previous_values.get( field ) )
- if previous_values.get( field ) is not None and not control.validate( previous_values.get( field ) ):
- control.write_Help( request )
-
- request.write( "</table>" )
-
- request.write( "<input type='hidden' name='passback' value=\"%s\"></p>" % self.passback )
- #request.write( "<input type='hidden' name='visited-sheet%s' value='True'></p>" % self.location )
-
- def addControl( self, control ):
- self.fields.append( [ control.getName(), control ] )
-
- def validate( self, request ):
-
- if not self.passback: self.parseForm( request )
-
- check = True
-
- previous_values = ssxp2hash( string2sxp( self.passback ) ) #get the map for quick reference
- if DEBUG: print previous_values
-
- for (field, control) in self.fields:
- if not control.validate( previous_values.get( field ) ):
- check = False
- if DEBUG: print "> %s = %s" % (field, previous_values.get( field ))
-
- return check
-
-class SheetControl( HTMLBase ):
-
- def __init__( self, reg_exp = ".*" ):
- HTMLBase.__init__( self )
- self.name = ""
- self.reg_exp = reg_exp
-
- def write_Control( self, request, persistedValue ):
- request.write( "<tr colspan='2'><td>%s</td></tr>" % persistedValue )
-
- def write_Help( self, request ):
- request.write( "<tr><td align='right' colspan='2'><p class='small'>Text must match pattern:" )
- request.write( " %s</p></td></tr>" % self.reg_exp )
-
- def validate( self, persistedValue ):
- if persistedValue is None:
- persistedValue = ""
-
- return not re.compile( self.reg_exp ).match( persistedValue ) is None
-
- def getName( self ):
- return self.name
-
- def setName( self, name ):
- self.name = name
-
-class InputControl( SheetControl ):
-
- def __init__( self, name, defaultValue, humanText, reg_exp = ".*", help_text = "You must enter the appropriate details in this field." ):
- SheetControl.__init__( self, reg_exp )
- self.setName( name )
-
- self.defaultValue = defaultValue
- self.humanText = humanText
- self.help_text = help_text
-
- def write_Control( self, request, persistedValue ):
- if persistedValue is None:
- persistedValue = self.defaultValue
-
- request.write( "<tr><td width='50%%'><p>%s</p></td><td width='50%%'><input size='40'type='text' name='%s' value=\"%s\"></td></tr>" % (self.humanText, self.getName(), persistedValue) )
-
- def write_Help( self, request ):
- request.write( "<tr><td align='right' colspan='2'><p class='small'>" )
- request.write( " %s</p></td></tr>" % self.help_text )
-
-class TextControl( SheetControl ):
-
- def __init__( self, text ):
- SheetControl.__init__( self )
- self.text = text
-
- def write_Control( self, request, persistedValue ):
- request.write( "<tr><td colspan='2'><p>%s</p></td></tr>" % self.text )
-
-class SmallTextControl( SheetControl ):
-
- def __init__( self, text ):
- SheetControl.__init__( self )
- self.text = text
-
- def write_Control( self, request, persistedValue ):
- request.write( "<tr><td colspan='2'><p class='small'>%s</p></tr></td>" % self.text )
-
-class ListControl( SheetControl ):
-
- def __init__( self, name, options, humanText ):
- SheetControl.__init__( self )
- self.setName( name )
- self.options = options
- self.humanText = humanText
-
- def write_Control( self, request, persistedValue ):
- request.write( "<tr><td width='50%%'><p>%s</p></td><td width='50%%'>" % self.humanText )
- request.write( "<select name='%s'>" % self.getName() )
- for (value, text) in self.options:
- if value == persistedValue:
- request.write( "<option value='%s' selected>%s\n" % (value, text) )
- else:
- request.write( "<option value='%s'>%s\n" % (value, text) )
- request.write( "</select></td></tr>" )
-
- def validate( self, persistedValue ):
- for (value, text) in self.options:
- if value == persistedValue:
- return True
-
- return False
-
-class FileControl( InputControl ):
-
- def __init__( self, name, defaultValue, humanText, reg_exp = ".*", help_text = "You must enter the appropriate details in this field." ):
- InputControl.__init__( self, name, defaultValue, humanText )
-
- def validate( self, persistedValue ):
- if persistedValue is None: return False
- try:
- open( persistedValue )
- return True
- except IOError, TypeError:
- return False
-
- def write_Help( self, request ):
- request.write( "<tr><td colspan='2' align='right'><p class='small'>File does not exist: you must enter a valid, absolute file path.</p></td></tr>" )
-
-class TickControl( SheetControl ):
-
- def __init__( self, name, defaultValue, humanText ):
- SheetControl.__init__( self )
- self.setName( name )
- self.defaultValue = defaultValue
- self.humanText = humanText
-
- def write_Control( self, request, persistedValue ):
- request.write( "<tr><td width='50%%'><p>%s</p></td><td width='50%%'>" % self.humanText )
-
- #request.write( str( persistedValue ) )
-
- #TODO: Theres a problem with this: it doesn't persist an untick, because the browsers don't pass it back. Need a fix...
-
- if persistedValue == 'True':
- request.write( "<input type='checkbox' name='%s' value='True' checked>" % self.getName() )
- else:
- request.write( "<input type='checkbox' name='%s' value='True'>" % self.getName() )
-
- request.write( "</td></tr>" )
-
-
diff --git a/tools/python/xen/sv/__init__.py b/tools/python/xen/sv/__init__.py
deleted file mode 100755
index 8d1c8b69c3..0000000000
--- a/tools/python/xen/sv/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/tools/python/xen/sv/util.py b/tools/python/xen/sv/util.py
deleted file mode 100755
index cfed3976df..0000000000
--- a/tools/python/xen/sv/util.py
+++ /dev/null
@@ -1,126 +0,0 @@
-from xen.xend.XendClient import server
-from xen.xend import sxp
-from xen.xend import PrettyPrint
-
-import types
-
-def getDomInfo( domain ):
- domInfoHash = {}
- try:
- domInfoHash = sxp2hash( server.xend_domain( domain ) )
- domInfoHash['dom'] = domain
- except:
- domInfoHash['name'] = "Error getting domain details"
- return domInfoHash
-
-def sxp2hash( s ):
- sxphash = {}
-
- for child in sxp.children( s ):
- if isinstance( child, types.ListType ) and len( child ) > 1:
- if isinstance( child[1], types.ListType ) and len( child ) > 1:
- sxphash[ child[0] ] = sxp2hash( child[1] )
- else:
- sxphash[ child[0] ] = child[1]
-
- return sxphash
-
-def ssxp2hash( s ):
- sxphash = {}
-
- for i in s:
- if isinstance( i, types.ListType ) and len( i ) > 1:
- sxphash[ i[0] ] = i[1]
-
- return sxphash
-
-def hash2sxp( h ):
- hashsxp = []
-
- for (key, item) in h.items():
- hashsxp.append( [key, item] )
-
- return hashsxp
-
-def string2sxp( string ):
- pin = sxp.Parser()
- pin.input( string )
- return pin.get_val()
-
-def sxp2string( sexp ):
- return sxp.to_string( sexp )
-
-def sxp2prettystring( sxp ):
- class tmp:
- def __init__( self ):
- self.str = ""
- def write( self, str ):
- self.str = self.str + str
- temp = tmp()
- PrettyPrint.prettyprint( sxp, out=temp )
- return temp.str
-
-def getVar( var, request, default=None ):
-
- arg = request.args.get( var )
-
- if arg is None:
- return default
- else:
- return arg[ len( arg )-1 ]
-
-def bigTimeFormatter( time ):
- time = float( time )
- weeks = time // 604800
- remainder = time % 604800
- days = remainder // 86400
-
- remainder = remainder % 86400
-
- hms = smallTimeFormatter( remainder )
-
- return "%d weeks, %d days, %s" % ( weeks, days, hms )
-
-def smallTimeFormatter( time ):
- time = float( time )
- hours = time // 3600
- remainder = time % 3600
- mins = remainder // 60
- secs = time % 60
- return "%02d:%02d:%04.1f (hh:mm:ss.s)" % ( hours, mins, secs )
-
-def stateFormatter( state ):
- states = [ 'Running', 'Blocked', 'Paused', 'Shutdown', 'Crashed' ]
-
- stateStr = ""
-
- for i in range( len( state ) ):
- if state[i] != "-":
- stateStr += "%s, " % states[ i ]
-
- return stateStr + " (%s)" % state
-
-def memoryFormatter( mem ):
- mem = int( mem )
- if mem >= 1024:
- mem = float( mem ) / 1024
- return "%3.2fGb" % mem
- else:
- return "%7dMb" % mem
-
-def cpuFormatter( mhz ):
- mhz = int( mhz )
- if mhz > 1000:
- ghz = float( mhz ) / 1000.0
- return "%4.2fGHz" % ghz
- else:
- return "%4dMHz" % mhz
-
-def hyperthreadFormatter( threads ):
- try:
- if int( threads ) > 1:
- return "Yes"
- else:
- return "No"
- except:
- return "No"