aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>2005-05-25 08:42:25 +0000
committercl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>2005-05-25 08:42:25 +0000
commit76105d8a76f6d2c1ee64089e5694f4a947bebfbb (patch)
tree7644f970242121c708a5d29151d3cfa89e75b6b1
parentcc0943ffa0c16d894c701e3cb793338c5ff375ed (diff)
downloadxen-76105d8a76f6d2c1ee64089e5694f4a947bebfbb.tar.gz
xen-76105d8a76f6d2c1ee64089e5694f4a947bebfbb.tar.bz2
xen-76105d8a76f6d2c1ee64089e5694f4a947bebfbb.zip
bitkeeper revision 1.1542.1.1 (42943a71LGhR_dI1LOX6lKtJ08zzTA)
setup.py, Makefile: Remove XenSV -- it's been broken since twisted was removed. Many files: Delete: tools/misc/xensv Delete: tools/python/xen/sv/params.py Delete: tools/python/xen/sv/__init__.py Delete: tools/python/xen/sv/MigrateDomain.py Delete: tools/python/xen/sv/Daemon.py Delete: tools/python/xen/sv/util.py Delete: tools/python/xen/sv/Wizard.py Delete: tools/python/xen/sv/TabView.py Delete: tools/python/xen/sv/SaveDomain.py Delete: tools/python/xen/sv/RestoreDomain.py Delete: tools/python/xen/sv/NodeInfo.py Delete: tools/python/xen/sv/Main.py Delete: tools/python/xen/sv/HTMLBase.py Delete: tools/python/xen/sv/GenTabbed.py Delete: tools/python/xen/sv/DomList.py Delete: tools/python/xen/sv/DomInfo.py Delete: tools/python/xen/sv/CreateDomain.py Delete: tools/sv/images/unpause.png Delete: tools/sv/images/small-unpause.png Delete: tools/sv/images/small-pause.png Delete: tools/sv/images/small-destroy.png Delete: tools/sv/images/shutdown.png Delete: tools/sv/images/seperator.jpg Delete: tools/sv/images/right-end-highlight.jpg Delete: tools/sv/images/reboot.png Delete: tools/sv/images/previous.png Delete: tools/sv/images/pause.png Delete: tools/sv/images/orb_02.jpg Delete: tools/sv/images/next.png Delete: tools/sv/images/middle-no-highlight.jpg Delete: tools/sv/images/middle-highlight.jpg Delete: tools/sv/images/left-end-no-highlight.jpg Delete: tools/sv/images/left-end-highlight.jpg Delete: tools/sv/images/finish.png Delete: tools/sv/images/destroy.png Delete: tools/sv/inc/style.css Delete: tools/sv/images/seperator-right-highlight.jpg Delete: tools/sv/images/seperator-left-highlight.jpg Delete: tools/sv/inc/script.js Delete: tools/sv/images/right-end-no-highlight.jpg Delete: tools/sv/images/orb_01.jpg Delete: tools/sv/Makefile Delete: tools/sv/Main.rpy Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
-rw-r--r--.rootkeys44
-rw-r--r--tools/misc/Makefile2
-rwxr-xr-xtools/misc/xensv137
-rw-r--r--tools/python/setup.py1
-rw-r--r--tools/python/xen/sv/CreateDomain.py163
-rw-r--r--tools/python/xen/sv/Daemon.py108
-rwxr-xr-xtools/python/xen/sv/DomInfo.py149
-rwxr-xr-xtools/python/xen/sv/DomList.py81
-rwxr-xr-xtools/python/xen/sv/GenTabbed.py131
-rwxr-xr-xtools/python/xen/sv/HTMLBase.py63
-rwxr-xr-xtools/python/xen/sv/Main.py113
-rw-r--r--tools/python/xen/sv/MigrateDomain.py72
-rwxr-xr-xtools/python/xen/sv/NodeInfo.py64
-rw-r--r--tools/python/xen/sv/RestoreDomain.py46
-rw-r--r--tools/python/xen/sv/SaveDomain.py59
-rwxr-xr-xtools/python/xen/sv/TabView.py49
-rwxr-xr-xtools/python/xen/sv/Wizard.py269
-rwxr-xr-xtools/python/xen/sv/__init__.py1
-rw-r--r--tools/python/xen/sv/params.py3
-rwxr-xr-xtools/python/xen/sv/util.py123
-rwxr-xr-xtools/sv/Main.rpy3
-rwxr-xr-xtools/sv/Makefile34
-rw-r--r--tools/sv/images/destroy.pngbin2408 -> 0 bytes
-rw-r--r--tools/sv/images/finish.pngbin1189 -> 0 bytes
-rw-r--r--tools/sv/images/left-end-highlight.jpgbin535 -> 0 bytes
-rw-r--r--tools/sv/images/left-end-no-highlight.jpgbin440 -> 0 bytes
-rw-r--r--tools/sv/images/middle-highlight.jpgbin376 -> 0 bytes
-rw-r--r--tools/sv/images/middle-no-highlight.jpgbin344 -> 0 bytes
-rw-r--r--tools/sv/images/next.pngbin1270 -> 0 bytes
-rwxr-xr-xtools/sv/images/orb_01.jpgbin19864 -> 0 bytes
-rwxr-xr-xtools/sv/images/orb_02.jpgbin507 -> 0 bytes
-rw-r--r--tools/sv/images/pause.pngbin1662 -> 0 bytes
-rw-r--r--tools/sv/images/previous.pngbin1285 -> 0 bytes
-rwxr-xr-xtools/sv/images/reboot.pngbin3132 -> 0 bytes
-rw-r--r--tools/sv/images/right-end-highlight.jpgbin535 -> 0 bytes
-rw-r--r--tools/sv/images/right-end-no-highlight.jpgbin447 -> 0 bytes
-rw-r--r--tools/sv/images/seperator-left-highlight.jpgbin552 -> 0 bytes
-rw-r--r--tools/sv/images/seperator-right-highlight.jpgbin560 -> 0 bytes
-rw-r--r--tools/sv/images/seperator.jpgbin443 -> 0 bytes
-rwxr-xr-xtools/sv/images/shutdown.pngbin2901 -> 0 bytes
-rw-r--r--tools/sv/images/small-destroy.pngbin483 -> 0 bytes
-rw-r--r--tools/sv/images/small-pause.pngbin434 -> 0 bytes
-rw-r--r--tools/sv/images/small-unpause.pngbin500 -> 0 bytes
-rw-r--r--tools/sv/images/unpause.pngbin1890 -> 0 bytes
-rw-r--r--tools/sv/images/xen.pngbin10575 -> 0 bytes
-rwxr-xr-xtools/sv/inc/script.js22
-rw-r--r--tools/sv/inc/style.css32
47 files changed, 1 insertions, 1768 deletions
diff --git a/.rootkeys b/.rootkeys
index 1891b6afe9..ac98ede4db 100644
--- a/.rootkeys
+++ b/.rootkeys
@@ -731,7 +731,6 @@
405eedf6_nnNhFQ1I85lhCkLK6jFGA tools/misc/xencons
40c9c4697z76HDfkCLdMhmaEwzFoNQ tools/misc/xend
41adc641dV-0cDLSyzMs5BT8nL7v3Q tools/misc/xenperf.c
-4107986eMWVdBoz4tXYoOscpN_BCYg tools/misc/xensv
4056f5155QYZdsk-1fLdjsZPFTnlhg tools/misc/xensymoops
40cf2937dqM1jWW87O5OoOYND8leuA tools/misc/xm
4270cc81g3nSNYCZ1ryCMDEbLtMtbQ tools/pygrub/Makefile
@@ -802,22 +801,6 @@
3fbd0a42l40lM0IICw2jXbQBVZSdZg tools/python/xen/lowlevel/xc/xc.c
40dc4076St6AmPTmQPrtQ6LGHPxGmw tools/python/xen/lowlevel/xu/__init__.py
40dc4076CwBYRTUQDdbdU1L6KcLgSw tools/python/xen/lowlevel/xu/xu.c
-41052eb84_irpx0E9N_kqBp9eoin5g tools/python/xen/sv/CreateDomain.py
-4107986egkTAMIHW7n-i4ShvCGWpLQ tools/python/xen/sv/Daemon.py
-40fcefb2qm13BbRZBydAatOavaS0fQ tools/python/xen/sv/DomInfo.py
-40fcefb2-RIU8GB67mJMRzybME9bxw tools/python/xen/sv/DomList.py
-40fcefb23FfQn-ZBCbcHqA0cPGqQxw tools/python/xen/sv/GenTabbed.py
-40fcefb2QZAn3u3sX-M7NXBjOv5HGg tools/python/xen/sv/HTMLBase.py
-40fcefb2vnfDbl4w_yCTedROPuqs0g tools/python/xen/sv/Main.py
-4186e24fZMp7_bX4f50MvUscdrST9Q tools/python/xen/sv/MigrateDomain.py
-40fcefb24h-04WaHag-Tg4nxWPhTig tools/python/xen/sv/NodeInfo.py
-4186e24fb4YtJw155tNtSXXN6nEWqA tools/python/xen/sv/RestoreDomain.py
-4186e24fVXt0lfeQSAy1eiFKnPCHTg tools/python/xen/sv/SaveDomain.py
-40fcefb2Sif__6AqrANeBQZZfvP-6w tools/python/xen/sv/TabView.py
-41052eb8UrgtUkuJPg7oY1tutVQHsg tools/python/xen/sv/Wizard.py
-40fcefb2DqteqCCZYDCvvh4Q5jBd0w tools/python/xen/sv/__init__.py
-4107986e6qN1IdvIDdId0AYFmDMkiQ tools/python/xen/sv/params.py
-40fcefb4rnaZNjqsBu7A5V2rlLyqRw tools/python/xen/sv/util.py
40d8915cyoVA0hJxiBFNymL7YvDaRg tools/python/xen/util/Brctl.py
40dfd40aGqGkiopOOgJxSF4iCbHM0Q tools/python/xen/util/__init__.py
4270e4efFg3wHCCxXpA0h6yoMTkeSQ tools/python/xen/util/blkif.py
@@ -893,33 +876,6 @@
40cf2937PSslwBliN1g7ofDy2H_RhA tools/python/xen/xm/opts.py
40cf2937Z8WCNOnO2FcWdubvEAF9QQ tools/python/xen/xm/shutdown.py
41b88ba6_C4---jeA895Efg9YFZgKA tools/python/xen/xm/sysrq.py
-40fcefb2K1xqVVT4D-p7nL2GzS4scg tools/sv/Main.rpy
-40ffbcb66Dj5F-1kCK9BcgSqCWkt1w tools/sv/Makefile
-4120b0e5L_nW-u0MWRfIdXg4ng4OjA tools/sv/images/destroy.png
-4107c921_OR9NTSv2dKFiLCXxrXoxA tools/sv/images/finish.png
-40fcefb3wXQMsl9WkgQAVtdrupm4sw tools/sv/images/left-end-highlight.jpg
-40fcefb3K6ESt5sQhD9aCQRscQIlXQ tools/sv/images/left-end-no-highlight.jpg
-40fcefb3BUT98zPzW8kAFKuxGdh4XA tools/sv/images/middle-highlight.jpg
-40fcefb38OTgsUKHBpwshLLIsiIaCA tools/sv/images/middle-no-highlight.jpg
-41052eb9SDUqSLGtG6rxk6Ep5fOhFA tools/sv/images/next.png
-40fcefb32SPtrw36c4S6YGFlLvkKuw tools/sv/images/orb_01.jpg
-40fcefb3Ok5qkX3iM7ZEPVkRInrUpg tools/sv/images/orb_02.jpg
-4104ffca9_GhWOxRE-83uZIad2Z1gg tools/sv/images/pause.png
-41052eb9NQqHe_f9-ev1CaA3y5YYZg tools/sv/images/previous.png
-41013a82ILk71xLqWFH5ZO5VmOIvBw tools/sv/images/reboot.png
-40fcefb3JnT5XeKTuVF4yUMGOtuNZg tools/sv/images/right-end-highlight.jpg
-40fcefb3-DuYOS7noo2W7b_0p7TOUg tools/sv/images/right-end-no-highlight.jpg
-40fcefb3qNbAZR5FYGPAZ9sFPVMTDA tools/sv/images/seperator-left-highlight.jpg
-40fcefb3dgsa24WLk_BJeYQHrDLuOg tools/sv/images/seperator-right-highlight.jpg
-40fcefb3FtiX4Pd2kT8wDlp8u8xRhQ tools/sv/images/seperator.jpg
-41013a82sUdUqBv8EoAUJii3gsZ-4g tools/sv/images/shutdown.png
-4120b0e5RyNoIQNMjUs4A2kshovjaQ tools/sv/images/small-destroy.png
-4120b0e6vW66wW6WvjQyFD0AZH2tng tools/sv/images/small-pause.png
-4120b0e6USof7ieyGxEvtCdTMpxaQw tools/sv/images/small-unpause.png
-4104ffca-jPHLVOrW0n0VghEXXtKxg tools/sv/images/unpause.png
-40fcefb3yMSrZvApO9ToIi-iQwnchA tools/sv/images/xen.png
-41013a83z27rKvWIxAfUBMVZ1eDCDg tools/sv/inc/script.js
-40fcefb3zGC9XNBkSwTEobCoq8YClA tools/sv/inc/style.css
422f27c8MDeRoOWZNdcRC5VDTcj3TQ tools/tests/Makefile
422f27c81CCtXt4Lthf7JF3Ajr0fUA tools/tests/test_x86_emulator.c
420b963dK3yGNtqxRM8npGZtrCQd1g tools/vnet/00INSTALL
diff --git a/tools/misc/Makefile b/tools/misc/Makefile
index 5281e94e00..5eebbfda12 100644
--- a/tools/misc/Makefile
+++ b/tools/misc/Makefile
@@ -16,7 +16,7 @@ HDRS = $(wildcard *.h)
TARGETS = xenperf xc_shadow
INSTALL_BIN = $(TARGETS) xencons
-INSTALL_SBIN = netfix xm xend xensv xenperf
+INSTALL_SBIN = netfix xm xend xenperf
all: build
build: $(TARGETS)
diff --git a/tools/misc/xensv b/tools/misc/xensv
deleted file mode 100755
index 339ed66a93..0000000000
--- a/tools/misc/xensv
+++ /dev/null
@@ -1,137 +0,0 @@
-#!/usr/bin/env python
-# -*- mode: python; -*-
-#============================================================================
-# Copyright (C) 2004 Tom Wilkie <tw275@cl.cam.ac.uk>
-# Copyright (C) 2004 Mike Wray <mike.wray@hp.com>
-#============================================================================
-
-"""SV web interface Lives in /usr/sbin.
- Provides pretty HTML management interface.
-
- Run:
-
- sv start
-
- The daemon is stopped with:
-
- sv stop
-
- The daemon will be accessible from http://localhost:8080/
-"""
-import os
-import sys
-import re
-
-# add fallback path for non-native python path installs if needed
-sys.path.append('/usr/lib/python')
-sys.path.append('/usr/lib64/python')
-from xen.xend.server.params import XEND_PID_FILE
-
-class CheckError(ValueError):
- pass
-
-def hline():
- print >>sys.stderr, "*" * 70
-
-def msg(message):
- print >>sys.stderr, "*" * 3, message
-
-def check_logging():
- """Check python logging is installed and raise an error if not.
- Logging is standard from Python 2.3 on.
- """
- try:
- import logging
- except ImportError:
- hline()
- msg("Python logging is not installed.")
- msg("Use 'make install-logging' at the xen root to install.")
- msg("")
- msg("Alternatively download and install from")
- msg("http://www.red-dove.com/python_logging.html")
- hline()
- raise CheckError("logging is not installed")
-
-def check_twisted_version():
- """Check twisted is installed with a supported version and print a warning if not.
- Raises an error if twisted is not installed.
- """
- # Supported twisted release and major version.
- RELEASE = 1
- MAJOR = 3
- try:
- from twisted.copyright import version
- except ImportError:
- hline()
- msg("The Twisted framework is not installed.")
- msg("Use 'make install-twisted' at the xen root to install.")
- msg("")
- msg("Alternatively download and install version %d.%d or higher" % (RELEASE, MAJOR))
- msg("from http://www.twistedmatrix.com/products")
- hline()
- raise CheckError("twisted is not installed")
-
-
- (release, major, minor) = version.split('.')
- release = int(release)
- major = int(major)
- if release > RELEASE: return
- if release == RELEASE and major >= MAJOR: return
- hline()
- msg("Warning: Twisted version not supported: %s" % version)
- msg("Use Twisted version %d.%d.0 or higher" % (RELEASE, MAJOR))
- hline()
-
-def check_xend():
- """Check xend is running
- """
-
- if not os.path.isfile(XEND_PID_FILE) or not os.path.getsize(XEND_PID_FILE):
- hline()
- msg( "Warning: Xend has not been detected as running." )
- msg( "Please start it immediately with: xend start " )
- hline()
- return 0
-
- # Read the pid of the previous invocation and search active process list.
- pid = open(XEND_PID_FILE, 'r').read()
- lines = os.popen('ps ' + pid + ' 2>/dev/null').readlines()
- for line in lines:
- if re.search('^ *' + pid + '.+xend', line):
- return 1
-
- hline()
- msg( "Warning: Xend has not been detected as running." )
- msg( "Please start it immediately with: xend start " )
- hline()
- return 0
-
-def main():
- try:
- check_logging()
- check_twisted_version()
- check_xend()
- except CheckError:
- sys.exit(1)
-
- from xen.sv import Daemon
-
- daemon = Daemon.instance()
-
- if not sys.argv[1:]:
- print 'usage: %s {start|stop|restart}' % sys.argv[0]
- elif os.fork():
- pid, status = os.wait()
- return status >> 8
- elif sys.argv[1] == 'start':
- return daemon.start()
- elif sys.argv[1] == 'stop':
- return daemon.stop()
- elif sys.argv[1] == 'restart':
- return daemon.stop() or daemon.start()
- else:
- print 'not an option:', sys.argv[1]
- return 1
-
-if __name__ == '__main__':
- sys.exit(main())
diff --git a/tools/python/setup.py b/tools/python/setup.py
index 76861908a6..e6b04f8708 100644
--- a/tools/python/setup.py
+++ b/tools/python/setup.py
@@ -39,7 +39,6 @@ setup(name = 'xen',
'xen.util',
'xen.xend',
'xen.xend.server',
- 'xen.sv',
'xen.xm',
'xen.web',
],
diff --git a/tools/python/xen/sv/CreateDomain.py b/tools/python/xen/sv/CreateDomain.py
deleted file mode 100644
index 4378897e5c..0000000000
--- a/tools/python/xen/sv/CreateDomain.py
+++ /dev/null
@@ -1,163 +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 )
-
-class CreatePage0( Sheet ):
-
- 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" ) )
-
-class CreatePage1( Sheet ):
-
- def __init__( self, urlWriter ):
- Sheet.__init__( self, urlWriter, "Setup Kernel Image", 1 )
-# 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:' ) )
-
-class CreatePage2( Sheet ):
-
- 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 ):
-
- def __init__( self, urlWriter ):
- Sheet.__init__( self, urlWriter, "Setup Virtual Block Device", 3 )
-
- def write_BODY( self, request, err ):
- 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, err )
-
-class CreatePage4( Sheet ):
-
- 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', '1.2.3.4', 'VM IP Address:' ) )
- self.addControl( InputControl( 'ip_subnet', '255.255.255.0', 'VM Subnet Mask:' ) )
- self.addControl( InputControl( 'ip_gateway', '1.2.3.4', 'VM Gateway:' ) )
- self.addControl( InputControl( 'ip_nfs', '1.2.3.4', 'NFS Server:' ) )
-
-class CreateFinish( Sheet ):
-
- def __init__( self, urlWriter ):
- Sheet.__init__( self, urlWriter, "All Done", 5 )
-
- def write_BODY( self, request, err ):
-
- if not self.passback: self.parseForm( request )
-
- xend_sxp = self.translate_sxp( string2sxp( self.passback ) )
-
- try:
- dom_sxp = server.xend_domain_create( xend_sxp )
- success = "Your domain was successfully created.\n"
- except:
- success = "There was an error creating your domain.\nThe configuration used is as follows:\n"
- dom_sxp = xend_sxp
-
-
-
- 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 )
-
- 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.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 ) ) )
-
- vals.disk = vbds
-
- #misc
-
- vals.pci = []
-
- vals.blkif = None
- vals.netif = None
- vals.restart = None
- vals.console = None
- vals.ramdisk = None
-
- #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)
-
- try:
- return make_config( vals )
- except:
- return [["Error creating domain config."]]
-
diff --git a/tools/python/xen/sv/Daemon.py b/tools/python/xen/sv/Daemon.py
deleted file mode 100644
index 510cfa9f04..0000000000
--- a/tools/python/xen/sv/Daemon.py
+++ /dev/null
@@ -1,108 +0,0 @@
-###########################################################
-## XenSV Web Control Interface Daemon
-## Copyright (C) 2004, K A Fraser (University of Cambridge)
-## Copyright (C) 2004, Mike Wray <mike.wray@hp.com>
-## Copyright (C) 2004, Tom Wilkie <tw275@cam.ac.uk>
-###########################################################
-
-import os
-import os.path
-import sys
-import re
-
-from xen.sv.params import *
-
-from twisted.internet import reactor
-from twisted.web import static, server, script
-
-class Daemon:
- """The xend daemon.
- """
- def __init__(self):
- self.shutdown = 0
- self.traceon = 0
-
- def daemon_pids(self):
- pids = []
- pidex = '(?P<pid>\d+)'
- pythonex = '(?P<python>\S*python\S*)'
- cmdex = '(?P<cmd>.*)'
- procre = re.compile('^\s*' + pidex + '\s*' + pythonex + '\s*' + cmdex + '$')
- xendre = re.compile('^/usr/sbin/xend\s*(start|restart)\s*.*$')
- procs = os.popen('ps -e -o pid,args 2>/dev/null')
- for proc in procs:
- pm = procre.match(proc)
- if not pm: continue
- xm = xendre.match(pm.group('cmd'))
- if not xm: continue
- #print 'pid=', pm.group('pid'), 'cmd=', pm.group('cmd')
- pids.append(int(pm.group('pid')))
- return pids
-
- def new_cleanup(self, kill=0):
- err = 0
- pids = self.daemon_pids()
- if kill:
- for pid in pids:
- print "Killing daemon pid=%d" % pid
- os.kill(pid, signal.SIGHUP)
- elif pids:
- err = 1
- print "Daemon already running: ", pids
- return err
-
- def cleanup(self, kill=False):
- # No cleanup to do if PID_FILE is empty.
- if not os.path.isfile(PID_FILE) or not os.path.getsize(PID_FILE):
- return 0
- # Read the pid of the previous invocation and search active process list.
- pid = open(PID_FILE, 'r').read()
- lines = os.popen('ps ' + pid + ' 2>/dev/null').readlines()
- for line in lines:
- if re.search('^ *' + pid + '.+xensv', line):
- if not kill:
- print "Daemon is already running (pid %d)" % int(pid)
- return 1
- # Old daemon is still active: terminate it.
- os.kill(int(pid), 1)
- # Delete the stale PID_FILE.
- os.remove(PID_FILE)
- return 0
-
- def start(self, trace=0):
- if self.cleanup(kill=False):
- return 1
-
- # Fork -- parent writes PID_FILE and exits.
- pid = os.fork()
- if pid:
- # Parent
- pidfile = open(PID_FILE, 'w')
- pidfile.write(str(pid))
- pidfile.close()
- return 0
- # Child
- self.run()
- return 0
-
- def stop(self):
- return self.cleanup(kill=True)
-
- def run(self):
- root = static.File( SV_ROOT )
- root.indexNames = [ 'Main.rpy' ]
- root.processors = { '.rpy': script.ResourceScript }
- reactor.listenTCP( SV_PORT, server.Site( root ) )
- reactor.run()
-
- def exit(self):
- reactor.disconnectAll()
- sys.exit(0)
-
-def instance():
- global inst
- try:
- inst
- except:
- inst = Daemon()
- return inst
diff --git a/tools/python/xen/sv/DomInfo.py b/tools/python/xen/sv/DomInfo.py
deleted file mode 100755
index 8aabb19057..0000000000
--- a/tools/python/xen/sv/DomInfo.py
+++ /dev/null
@@ -1,149 +0,0 @@
-from xen.xend.XendClient import getAsynchServer
-server = getAsynchServer()
-from xen.xend import PrettyPrint
-
-from xen.sv.HTMLBase import HTMLBase
-from xen.sv.util import *
-from xen.sv.GenTabbed import *
-
-DEBUG=1
-
-class DomInfo( GenTabbed ):
-
- def __init__( self, urlWriter ):
-
- self.dom = 0;
-
- def tabUrlWriter( tab ):
- return urlWriter( "&dom=%s%s" % ( self.dom, tab ) )
-
- GenTabbed.__init__( self, "Domain Info", tabUrlWriter, [ 'General', 'SXP', 'Devices' ], [ DomGeneralTab, DomSXPTab, NullTab ] )
-
- def write_BODY( self, request ):
- dom = request.args.get('dom')
-
- if dom is None or len(dom) != 1:
- request.write( "<p>Please Select a Domain</p>" )
- return None
- else:
- self.dom = dom[0]
-
- GenTabbed.write_BODY( self, request )
-
- def write_MENU( self, request ):
- pass
-
-class DomGeneralTab( CompositeTab ):
- def __init__( self ):
- CompositeTab.__init__( self, [ DomGenTab, DomActionTab ] )
-
-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 = getDomInfoHash( 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 the Domain", "shutdown.png" ),
- "reboot" : ( "Reboot the Domain", "reboot.png" ),
- "pause" : ( "Pause the Domain", "pause.png" ),
- "unpause" : ( "Unpause the Domain", "unpause.png" ),
- "destroy" : ( "Destroy the Domain", "destroy.png" ) }
- 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 ), "halt" )
- 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 ), "halt" )
- except:
- pass
-
-
-
-
-
diff --git a/tools/python/xen/sv/DomList.py b/tools/python/xen/sv/DomList.py
deleted file mode 100755
index 86976b7af3..0000000000
--- a/tools/python/xen/sv/DomList.py
+++ /dev/null
@@ -1,81 +0,0 @@
-from xen.xend.XendClient import server
-from xen.xend import sxp
-
-from xen.sv.HTMLBase import HTMLBase
-from xen.sv.util import *
-
-class DomList( HTMLBase ):
-
- isLeaf = True
-
- def __init__( self, urlWriter ):
- HTMLBase.__init__(self)
- self.urlWriter = urlWriter
-
- def write_MENU( self, request ):
- return self.write_BODY( request, head=True, long=False )
-
- def write_BODY( self, request, head=True, long=True ):
-
- domains = None
-
- 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" )
-
- if head:
- request.write( "<tr class='domainInfoHead'>" )
- self.write_DOMAIN_HEAD( request, long )
- request.write( "</tr>" )
-
- odd = True
-
- if not domains is None:
- for domain in domains:
- if odd:
- request.write( "<tr class='domainInfoOdd'>\n" )
- odd = False
- else:
- request.write( "<tr class='domainInfoEven'>\n" )
- odd = True
- self.write_DOMAIN( request, getDomInfoHash( domain ), long )
- 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>\n" )
-
- def write_DOMAIN( self, request, domInfoHash, long=True ):
- request.write( "<td class='domainInfo' align='center'>%(id)s</td>\n" % domInfoHash )
-
- url = self.urlWriter( "&mod=info&dom=%(id)s" % domInfoHash )
-
- request.write( "<td class='domainInfo' align='center'><a href='%s'>%s</a></td>\n" % ( url, domInfoHash['name'] ) )
- if long:
- request.write( "<td class='domainInfo' align='center'>%(memory)5s</td>\n" % domInfoHash )
- request.write( "<td class='domainInfo' align='center'>%(cpu)2s</td>\n" % domInfoHash )
- request.write( "<td class='domainInfo' align='center'>%(state)5s</td>\n" % domInfoHash )
- if domInfoHash[ 'id' ] != "0":
- request.write( "<td class='domainInfo' align='center'>" )
-
- if domInfoHash[ 'state' ][ 2 ] == "-":
- request.write( "<img src='images/small-pause.png' onclick='doOp2( \"pause\", \"%(dom)-4s\" )'>" % domInfoHash )
- else:
- request.write( "<img src='images/small-unpause.png' onclick='doOp2( \"unpause\", \"%(dom)-4s\" )'>" % domInfoHash )
-
- request.write( "<img src='images/small-destroy.png' onclick='doOp2( \"destroy\", \"%(dom)-4s\" )'></td>" % domInfoHash)
- else:
- request.write( "<td>&nbsp;</td>" )
-
- def write_DOMAIN_HEAD( self, request, long=True ):
- request.write( "<td class='domainInfoHead' align='center'>Domain</td>\n" )
- request.write( "<td class='domainInfoHead' align='center'>Name</td>\n" )
- if long:
- request.write( "<td class='domainInfoHead' align='center'>Memory / Mb</td>\n" )
- request.write( "<td class='domainInfoHead' align='center'>CPU</td>\n" )
- request.write( "<td class='domainInfoHead' align='center'>State</td>\n" )
- request.write( "<td class='domainInfoHead' align='center'></td>\n" )
diff --git a/tools/python/xen/sv/GenTabbed.py b/tools/python/xen/sv/GenTabbed.py
deleted file mode 100755
index aef1848e7a..0000000000
--- a/tools/python/xen/sv/GenTabbed.py
+++ /dev/null
@@ -1,131 +0,0 @@
-import types
-
-from xen.sv.HTMLBase import HTMLBase
-from xen.sv.TabView import TabView
-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, urlWriter = None ):
-
- tab = int( getVar( 'tab', request, 0 ) )
-
- request.write( "<table style='' width='100%' border='0' cellspacing='0' cellpadding='0'>" )
- request.write( "<tr><td>" )
-
- request.write( "<p align='center'><u>%s</u></p>" % self.title )
-
- TabView( tab, self.tabStrings, self.urlWriter ).write_BODY( request )
-
- request.write( "</td></tr><tr><td>" )
-
- render_tab = self.tabObjects[ tab ]
-
- if render_tab is None:
- request.write( "<p>Bad Tab</p>" )
- self.finish_BODY( request )
- else:
- render_tab().write_BODY( request )
-
- request.write( "</td></tr></table>" )
-
- def perform( self, request ):
- tab = int( getVar( 'tab', request, 0 ) )
-
- op_tab = self.tabObjects[ tab ]
-
- if op_tab:
- op_tab().perform( request )
-
-class PreTab( HTMLBase ):
-
- def __init__( self, source ):
- HTMLBase.__init__( self )
- self.source = source
-
- def write_BODY( self, request ):
-
- request.write( "<div style='display: block; overflow: auto; border: 0px solid black; width: 540px; padding: 5px; z-index:0; align: center'><pre>" )
-
- request.write( self.source )
-
- request.write( "</pre></div>" )
-
-class GeneralTab( HTMLBase ):
-
- def __init__( self, dict, titles ):
- HTMLBase.__init__( self )
- self.dict = dict
- self.titles = titles
-
- def write_BODY( self, request ):
-
- request.write( "<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( "<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 ):
- HTMLBase.__init__( self )
- self.title = "Null Tab"
-
- def write_BODY( self, request ):
- request.write( "<p>%s</p>" % self.title )
-
-class ActionTab( HTMLBase ):
-
- def __init__( self, actions ):
- self.actions = actions
- HTMLBase.__init__( self )
-
- def write_BODY( self, request ):
- request.write("<p align='center'>")
-
- for ( command, ( text, image ) ) in self.actions.items():
- request.write("<img src='images/%s' width='54' height='54' onclick='doOp( \"%s\" )' onmouseover='update( \"button_desc\", \"%s\" )' " % ( image, command, text ) )
- request.write("onmouseout='update( \"button_desc\", \"&nbsp;\" )' style='button'>")
- request.write("&nbsp;&nbsp;")
-
- request.write("<p align='center'><span id='button_desc'>&nbsp;</span></p>")
- request.write("</p>")
-
-class CompositeTab( HTMLBase ):
-
- def __init__( self, tabs ):
- HTMLBase.__init__( self )
- self.tabs = tabs
-
- def write_BODY( self, request ):
- for tab in self.tabs:
- request.write( "<br/>" )
- tab().write_BODY( request )
-
- def perform( self, request ):
- for tab in self.tabs:
- tab().perform( request )
-
-
-
-
diff --git a/tools/python/xen/sv/HTMLBase.py b/tools/python/xen/sv/HTMLBase.py
deleted file mode 100755
index e67784d558..0000000000
--- a/tools/python/xen/sv/HTMLBase.py
+++ /dev/null
@@ -1,63 +0,0 @@
-from twisted.web.resource import Resource
-from xen.sv.util import *
-
-class HTMLBase( Resource ):
-
- isLeaf = True
-
- def __init__( self ):
- Resource.__init__(self)
-
- def render_POST( self, request ):
- self.perform( request )
- return self.render_GET( request )
-
- def render_GET( self, request ):
- self.write_TOP( request )
- self.write_BODY( request )
- self.write_BOTTOM( request )
- return ''
-
- def write_BODY( self, request ):
- request.write( "BODY" )
-
- def write_TOP( self, request ):
- request.write( '<html><head><title>Xen</title><link rel="stylesheet" type="text/css" href="inc/style.css" />' )
- request.write( '<script src="inc/script.js"></script>' )
- request.write( '</head><body>' )
- request.write('<form method="post" action="%s">' % request.uri)
-
- def write_BOTTOM( self, request ):
- request.write('<input type="hidden" name="op" value="">')
- request.write('<input type="hidden" name="args" value="">')
- request.write('</form>')
- request.write( "</body></html>" )
-
- 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 196e1c1450..0000000000
--- a/tools/python/xen/sv/Main.py
+++ /dev/null
@@ -1,113 +0,0 @@
-from xen.sv.HTMLBase import HTMLBase
-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
-
-from xen.sv.util import getVar
-
-class Main( HTMLBase ):
-
- isLeaf = True
-
- def __init__( self, urlWriter = None ):
- self.modules = { "node": NodeInfo,
- "list": DomList,
- "info": DomInfo,
- "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 ):
-
- #decide what module post'd the action
-
- args = getVar( 'args', request )
-
- mod = getVar( 'mod', request )
-
- if not mod is None and args is None:
- module = self.modules[ mod ]
- #check module exists
- if module:
- module( self.mainUrlWriter ).perform( request )
- else:
- self.perform( request )
-
- return self.render_GET( request )
-
- def mainUrlWriter( self, module ):
- def fun( f ):
- return "Main.rpy?mod=%s%s" % ( module, f )
- return fun
-
- def write_BODY( self, request ):
-
- request.write( "\n<table style='border:0px solid black; background: url(images/orb_01.jpg) no-repeat' cellspacing='0' cellpadding='0' border='0' width='780px' height='536px'>\n" )
- request.write( "<tr>\n" )
- request.write( " <td width='15px'>&nbsp;</td>" )
- request.write( " <td width='175px' align='center' valign'center'>" )
- request.write( " <table cellspacing='0' cellpadding='0' border='0' width='100%' height='100%'>" )
- request.write( " <tr><td height='140px' align='center' valign='bottom'><a href='http://www.cl.cam.ac.uk/Research/SRG/netos/xen/'>" )
- 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 in self.module_menus:
- self.modules[modName]( self.mainUrlWriter( modName ) ).write_MENU( request )
-
- request.write( " </td></tr>" )
- request.write( " </table>" )
- request.write( " &nbsp;" )
- request.write( " </td>\n" )
- request.write( " <td width='15px'>&nbsp;</td>" )
- request.write( " <td width='558px' align='left' valign='top'>" )
- request.write( " <table cellspacing='0' cellpadding='0' border='0' width='100%' height='100%'>" )
- request.write( " <tr><td height='20px'></td></tr>" )
- request.write( " <tr><td align='center' valign='top'>" )
-
- modName = getVar('mod', request)
-
- if modName is None:
- request.write( '<p>Please select a module</p>' )
- else:
- module = self.modules[ modName ]
- if module:
- module( self.mainUrlWriter( modName ) ).write_BODY( request )
- else:
- request.write( '<p>Invalid module. Please select another</p>' )
-
- request.write( " </td></tr>" )
- request.write( " </table>" )
- request.write( " </td>\n" )
- request.write( " <td width='17px'>&nbsp;</td>" )
- request.write( "</tr>\n" )
-
- request.write( "</table>\n" )
-
-
- def op_destroy( self, request ):
- dom = getVar( 'dom', request )
- if not dom is None and dom != "0":
- server.xend_domain_destroy( int( dom ), "halt" )
-
- def op_pause( self, request ):
- dom = getVar( 'dom', request )
- if not dom is None and dom != "0":
- server.xend_domain_pause( int( dom ) )
-
- def op_unpause( self, request ):
- dom = getVar( 'dom', request )
- if not dom is None and dom != "0":
- server.xend_domain_unpause( int( dom ) )
diff --git a/tools/python/xen/sv/MigrateDomain.py b/tools/python/xen/sv/MigrateDomain.py
deleted file mode 100644
index 928acf3f42..0000000000
--- a/tools/python/xen/sv/MigrateDomain.py
+++ /dev/null
@@ -1,72 +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 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 )
diff --git a/tools/python/xen/sv/NodeInfo.py b/tools/python/xen/sv/NodeInfo.py
deleted file mode 100755
index 5db1a34c50..0000000000
--- a/tools/python/xen/sv/NodeInfo.py
+++ /dev/null
@@ -1,64 +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', ], [ NodeGeneralTab, NodeDmesgTab ] )
-
- 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 ):
- CompositeTab.__init__( self, [ NodeInfoTab, NodeActionTab ] )
-
-class NodeInfoTab( GeneralTab ):
-
- def __init__( self ):
-
- 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 ):
- 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 ):
- ActionTab.__init__( self, { "shutdown" : ( "Shutdown the Node", "shutdown.png" ),
- "reboot" : ( "Reboot the Node", "reboot.png" ) } )
-
- def op_shutdown( self, request ):
- print ">NodeShutDown"
- server.xend_node_shutdown()
-
- def op_reboot( self, request ):
- print ">NodeReboot"
- server.xend_node_reboot()
diff --git a/tools/python/xen/sv/RestoreDomain.py b/tools/python/xen/sv/RestoreDomain.py
deleted file mode 100644
index be8b4f558a..0000000000
--- a/tools/python/xen/sv/RestoreDomain.py
+++ /dev/null
@@ -1,46 +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 ):
- 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 )
diff --git a/tools/python/xen/sv/SaveDomain.py b/tools/python/xen/sv/SaveDomain.py
deleted file mode 100644
index 4c4e315272..0000000000
--- a/tools/python/xen/sv/SaveDomain.py
+++ /dev/null
@@ -1,59 +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 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 )
diff --git a/tools/python/xen/sv/TabView.py b/tools/python/xen/sv/TabView.py
deleted file mode 100755
index cada51c4e8..0000000000
--- a/tools/python/xen/sv/TabView.py
+++ /dev/null
@@ -1,49 +0,0 @@
-from xen.sv.HTMLBase import HTMLBase
-
-class TabView( HTMLBase ):
-
- def __init__( self, tab, tabs, urlWriter ):
- HTMLBase.__init__(self)
- self.tab = tab # interger - tab id
- self.tabs = tabs
- self.urlWriter = urlWriter
-
- def write_BODY( self, request ):
- request.write( "<table style='' border='0' cellspacing='0' cellpadding='0' align='center'>" )
- request.write( "<tr height='22'>" )
-
- if self.tab == 0:
- image = "left-end-highlight.jpg"
- else:
- image = "left-end-no-highlight.jpg"
-
- request.write( "<td height='22' width='14'><image src='images/%s' width='14' height='22'></td>" % image )
-
- count = len( self.tabs )
-
- for i in range( count ):
-
- if i == self.tab:
- image = "middle-highlight.jpg"
- else:
- image = "middle-no-highlight.jpg"
-
- request.write( "<td style='background: url(images/%s)'><p align='center'><a href='%s'>%s</a></p></td>" % ( image, self.urlWriter( "&tab=%s" % i ), self.tabs[ i ] ) )
-
- if i < count-1:
- if i == self.tab:
- image = "seperator-left-highlight.jpg"
- elif self.tab == i+1:
- image = "seperator-right-highlight.jpg"
- else:
- image = "seperator.jpg"
-
- request.write( "<td height='22' width='23'><image src='images/%s' width='23' height='22'></td>" % image )
-
- if self.tab == count - 1:
- image = "right-end-highlight.jpg"
- else:
- image = "right-end-no-highlight.jpg"
-
- request.write( "<td height='22' width='14'><image src='images/%s' width='14' height='22'></td>" % image )
- request.write( "</tr></table>" )
diff --git a/tools/python/xen/sv/Wizard.py b/tools/python/xen/sv/Wizard.py
deleted file mode 100755
index 089d3f2e67..0000000000
--- a/tools/python/xen/sv/Wizard.py
+++ /dev/null
@@ -1,269 +0,0 @@
-from xen.sv.util import *
-from xen.sv.HTMLBase import HTMLBase
-from xen.xend import sxp
-
-import re
-
-DEBUG = 0
-
-class Wizard( HTMLBase ):
-
- def __init__( self, urlWriter, title, sheets ):
- HTMLBase.__init__( self )
- self.title = title
- self.sheets = sheets
- self.urlWriter = urlWriter
-
- 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 ):
-
- request.write( "<table width='100%' border='0' cellspacing='0' cellpadding='0'><tr><td>" )
- request.write( "<p align='center'><u>%s</u></p></td></tr><tr><td>" % self.title )
-
- currSheet = getVar( 'sheet', request )
-
- if not currSheet is None:
- currSheet = int( currSheet )
- else:
- currSheet = 0
-
- sheet = self.sheets[ currSheet ]( self.urlWriter )
-
- err = not sheet.validate( request )
-
- if not err:
- op = getVar( 'op', request )
-
- if op == 'next':
- currSheet += 1
- elif op == 'prev':
- currSheet -= 1
-
- sheet = self.sheets[ currSheet ]( self.urlWriter )
-
- if getVar( 'visited-sheet%s' % currSheet, request ):
- sheet.write_BODY( request, err )
- else:
- sheet.write_BODY( request, False )
-
-
- request.write( "</td></tr><tr><td><table width='100%' border='0' cellspacing='0' cellpadding='0'><tr>" )
- request.write( "<td width='80%'></td><td width='20%' align='center'><p align='center'>" )
- if currSheet > 0:
- request.write( "<img src='images/previous.png' onclick='doOp( \"prev\" )' onmouseover='update( \"wizText\", \"Previous\" )' onmouseout='update( \"wizText\", \"&nbsp;\" )'>&nbsp;" )
- if currSheet < ( len( self.sheets ) - 2 ):
- request.write( "<img src='images/next.png' onclick='doOp( \"next\" )' onmouseover='update( \"wizText\", \"Next\" )' onmouseout='update( \"wizText\", \"&nbsp;\" )'>" )
- elif currSheet == ( len( self.sheets ) - 2 ):
- request.write( "<img src='images/finish.png' onclick='doOp( \"next\" )' onmouseover='update( \"wizText\", \"Finish\" )' onmouseout='update( \"wizText\", \"&nbsp;\" )'>" )
- request.write( "</p><p align='center'><span id='wizText'></span></p></td></tr></table>" )
- request.write( "</td></tr></table>" )
-
- def op_next( self, request ):
- pass
-
- def op_prev( self, request ):
- pass
-
- def op_finish( self, request ):
- pass
-
-class Sheet( HTMLBase ):
-
- def __init__( self, urlWriter, title, location ):
- HTMLBase.__init__( self )
- self.urlWriter = urlWriter
- self.feilds = []
- self.title = title
- self.location = location
- self.passback = None
-
- def parseForm( self, request ):
- do_not_parse = [ 'mod', 'op', 'sheet', '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, err ):
-
- 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 (feild, control) in self.feilds:
- control.write_Control( request, previous_values.get( feild ) )
- if err and not control.validate( previous_values.get( feild ) ):
- 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='sheet' value='%s'></p>" % self.location )
- request.write( "<input type='hidden' name='visited-sheet%s' value='True'></p>" % self.location )
-
- def addControl( self, control ):
- self.feilds.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 hash for quick reference
- if DEBUG: print previous_values
-
- for (feild, control) in self.feilds:
- if not control.validate( previous_values.get( feild ) ):
- check = False
- if DEBUG: print "> %s = %s" % (feild, previous_values.get( feild ))
-
- 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 feild." ):
- 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 feild." ):
- 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 )
-
- 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( "</select></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/params.py b/tools/python/xen/sv/params.py
deleted file mode 100644
index beed647a4f..0000000000
--- a/tools/python/xen/sv/params.py
+++ /dev/null
@@ -1,3 +0,0 @@
-SV_PORT = 8080
-SV_ROOT = "/var/lib/xen/sv/"
-PID_FILE = "/var/run/xen-sv.pid"
diff --git a/tools/python/xen/sv/util.py b/tools/python/xen/sv/util.py
deleted file mode 100755
index 3207b8f0cc..0000000000
--- a/tools/python/xen/sv/util.py
+++ /dev/null
@@ -1,123 +0,0 @@
-from xen.xend.XendClient import server
-from xen.xend import sxp
-from xen.xend import PrettyPrint
-
-import types
-
-def getDomInfoHash( 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 ):
- if int( threads ) > 1:
- return "Yes (%d)" % threads
- else:
- return "No"
diff --git a/tools/sv/Main.rpy b/tools/sv/Main.rpy
deleted file mode 100755
index 6b75ea9431..0000000000
--- a/tools/sv/Main.rpy
+++ /dev/null
@@ -1,3 +0,0 @@
-from xen.sv.Main import Main
-
-resource = Main()
diff --git a/tools/sv/Makefile b/tools/sv/Makefile
deleted file mode 100755
index 4da91e0674..0000000000
--- a/tools/sv/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-sv_insdir := /var/lib/xen/sv
-INSTALL = install
-INSTALL_DIR = $(INSTALL) -d -m0755
-INSTALL_DATA = $(INSTALL) -m0644
-
-all:
-
-IMAGES = xen.png orb_01.jpg orb_02.jpg
-IMAGES += left-end-highlight.jpg left-end-no-highlight.jpg
-IMAGES += right-end-highlight.jpg right-end-no-highlight.jpg
-IMAGES += middle-highlight.jpg middle-no-highlight.jpg
-IMAGES += seperator.jpg
-IMAGES += seperator-left-highlight.jpg seperator-right-highlight.jpg
-IMAGES += shutdown.png reboot.png pause.png unpause.png destroy.png
-IMAGES += small-destroy.png small-pause.png small-unpause.png
-IMAGES += next.png previous.png finish.png
-
-install:
- # copy XenSV Main.rpy file
- @[ -d $(DESTDIR)$(sv_insdir) ] || $(INSTALL_DIR) $(DESTDIR)$(sv_insdir)
- @$(INSTALL_DATA) Main.rpy $(DESTDIR)$(sv_insdir)
-
- # copy XenSV images
- @[ -d $(DESTDIR)$(sv_insdir)/images ] || \
- $(INSTALL_DIR) $(DESTDIR)$(sv_insdir)/images
- @(cd images && $(INSTALL_DATA) $(IMAGES) $(DESTDIR)$(sv_insdir)/images)
-
- # copy XenSV stylesheet
- @[ -d $(DESTDIR)$(sv_insdir)/inc ] || \
- $(INSTALL_DIR) $(DESTDIR)$(sv_insdir)/inc
- @$(INSTALL_DATA) inc/style.css inc/script.js $(DESTDIR)$(sv_insdir)/inc
-
-clean:
-
diff --git a/tools/sv/images/destroy.png b/tools/sv/images/destroy.png
deleted file mode 100644
index 9545fc4837..0000000000
--- a/tools/sv/images/destroy.png
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/finish.png b/tools/sv/images/finish.png
deleted file mode 100644
index 6c5d18a9b7..0000000000
--- a/tools/sv/images/finish.png
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/left-end-highlight.jpg b/tools/sv/images/left-end-highlight.jpg
deleted file mode 100644
index 3922eb593a..0000000000
--- a/tools/sv/images/left-end-highlight.jpg
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/left-end-no-highlight.jpg b/tools/sv/images/left-end-no-highlight.jpg
deleted file mode 100644
index ded4e3933b..0000000000
--- a/tools/sv/images/left-end-no-highlight.jpg
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/middle-highlight.jpg b/tools/sv/images/middle-highlight.jpg
deleted file mode 100644
index db9829d9bf..0000000000
--- a/tools/sv/images/middle-highlight.jpg
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/middle-no-highlight.jpg b/tools/sv/images/middle-no-highlight.jpg
deleted file mode 100644
index da3b4f68a0..0000000000
--- a/tools/sv/images/middle-no-highlight.jpg
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/next.png b/tools/sv/images/next.png
deleted file mode 100644
index da10bbfb9b..0000000000
--- a/tools/sv/images/next.png
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/orb_01.jpg b/tools/sv/images/orb_01.jpg
deleted file mode 100755
index e30efc4985..0000000000
--- a/tools/sv/images/orb_01.jpg
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/orb_02.jpg b/tools/sv/images/orb_02.jpg
deleted file mode 100755
index e5ebc8e4b1..0000000000
--- a/tools/sv/images/orb_02.jpg
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/pause.png b/tools/sv/images/pause.png
deleted file mode 100644
index 6e16daa177..0000000000
--- a/tools/sv/images/pause.png
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/previous.png b/tools/sv/images/previous.png
deleted file mode 100644
index 22292d6e9c..0000000000
--- a/tools/sv/images/previous.png
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/reboot.png b/tools/sv/images/reboot.png
deleted file mode 100755
index 358e6deb8f..0000000000
--- a/tools/sv/images/reboot.png
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/right-end-highlight.jpg b/tools/sv/images/right-end-highlight.jpg
deleted file mode 100644
index 1ffee341ab..0000000000
--- a/tools/sv/images/right-end-highlight.jpg
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/right-end-no-highlight.jpg b/tools/sv/images/right-end-no-highlight.jpg
deleted file mode 100644
index 0ddd058d67..0000000000
--- a/tools/sv/images/right-end-no-highlight.jpg
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/seperator-left-highlight.jpg b/tools/sv/images/seperator-left-highlight.jpg
deleted file mode 100644
index c90f4ffd12..0000000000
--- a/tools/sv/images/seperator-left-highlight.jpg
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/seperator-right-highlight.jpg b/tools/sv/images/seperator-right-highlight.jpg
deleted file mode 100644
index f37e6cd546..0000000000
--- a/tools/sv/images/seperator-right-highlight.jpg
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/seperator.jpg b/tools/sv/images/seperator.jpg
deleted file mode 100644
index c77e2c5500..0000000000
--- a/tools/sv/images/seperator.jpg
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/shutdown.png b/tools/sv/images/shutdown.png
deleted file mode 100755
index 48a52dce21..0000000000
--- a/tools/sv/images/shutdown.png
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/small-destroy.png b/tools/sv/images/small-destroy.png
deleted file mode 100644
index f800bd7685..0000000000
--- a/tools/sv/images/small-destroy.png
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/small-pause.png b/tools/sv/images/small-pause.png
deleted file mode 100644
index 7bbdbfaafe..0000000000
--- a/tools/sv/images/small-pause.png
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/small-unpause.png b/tools/sv/images/small-unpause.png
deleted file mode 100644
index 6ae5687a0c..0000000000
--- a/tools/sv/images/small-unpause.png
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/unpause.png b/tools/sv/images/unpause.png
deleted file mode 100644
index c971308814..0000000000
--- a/tools/sv/images/unpause.png
+++ /dev/null
Binary files differ
diff --git a/tools/sv/images/xen.png b/tools/sv/images/xen.png
deleted file mode 100644
index 344c361b3c..0000000000
--- a/tools/sv/images/xen.png
+++ /dev/null
Binary files differ
diff --git a/tools/sv/inc/script.js b/tools/sv/inc/script.js
deleted file mode 100755
index 47cd10399c..0000000000
--- a/tools/sv/inc/script.js
+++ /dev/null
@@ -1,22 +0,0 @@
-function update( objRef, text )
-{
- if ( document.all || document.getElementById )
- {
- obj = ( document.getElementById )? document.getElementById( objRef ) : document.all( objRef );
-
- obj.innerHTML= text
- }
-}
-
-function doOp( op )
-{
- document.forms[0].op.value = op
- document.forms[0].submit()
-}
-
-function doOp2( op, args )
-{
- document.forms[0].op.value = op
- document.forms[0].args.value = args
- document.forms[0].submit()
-}
diff --git a/tools/sv/inc/style.css b/tools/sv/inc/style.css
deleted file mode 100644
index 263ab59b23..0000000000
--- a/tools/sv/inc/style.css
+++ /dev/null
@@ -1,32 +0,0 @@
-
-P {font-family: verdana, arial; font-size: 12px; color: black}
-.small {font-size: 10px}
-
-TD.domainInfo {font-family: verdana, arial; font-size: 10px; color: black}
-TD.domainInfoHead {font-family: verdana, arial; font-size: 10px; color: white; font-face: bold}
-
-TD.domainInfoHead {background-color: black}
-TR.domainInfoOdd {background-color: white}
-TR.domainInfoEven {background-color: lightgrey}
-
-body {
- width: 670px;
- margin: 0px;
- padding: 0px;
- background-color: #fff;
- background-image: url(../images/orb_02.jpg);
- background-repeat: repeat-y;
- background-position: left top;
- font-family: Arial, Helvetica, sans-serif;
- font-weight: bold;
- color: #333333;
- letter-spacing: 0px;
- scrollbar-base-color: #333333;
- scrollbar-track-color: #666666;
- scrollbar-face-color: #fff;
-
-
- }
-
-.button (cursor:hand)
-