Add a simple verify and repair function to autoserv for the
scheduler to call. This does a little bit of stuff each, and will
be useful, but basically it's a starter

Signed-off-by: Martin Bligh <mbligh@google.com>



git-svn-id: http://test.kernel.org/svn/autotest/trunk@922 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/server/autoserv b/server/autoserv
index 0df92d0..d9daf7d 100755
--- a/server/autoserv
+++ b/server/autoserv
@@ -23,6 +23,8 @@
 	[-b]                       # reboot all specified machines after the job
 	[-l label]                 # label for the job (arbitrary string)
 	[-u user]                  # username for the job (email address)
+	[-v]                       # verify the machines only
+	[-R]                       # repair the machines
 	<control file>             # name of the control file to run
 	[args ...]                 # args to pass through to the control file
 """
@@ -38,18 +40,20 @@
 machines = parser.parse_opts_param('-m', None, split = ',')
 machines_file = parser.parse_opts_param('-M', None)
 results  = parser.parse_opts_param('-r', os.path.abspath('.'))
+results  = os.path.abspath(results)
 label    = parser.parse_opts_param('-l', '')
 user     = parser.parse_opts_param('-u', realuser)
 client   = parser.parse_opts('-c')
 reboot   = parser.parse_opts('-b')
 install_before = parser.parse_opts('-i')
 install_after  = parser.parse_opts('-I')
-results = os.path.abspath(results)
+verify   = parser.parse_opts('-v')
+repair   = parser.parse_opts('-R')
 
 if getattr(hosts.site_host, 'site_parse_options', None):
 	hosts.site_host.site_parse_options(parser)
 
-if len(parser.args) < 1:
+if len(parser.args) < 1 and not verify and not repair:
 	print usage
 	sys.exit(-1)
 
@@ -62,6 +66,13 @@
 	print "Read list of machines from file: %s" % machines_file
 	print ','.join(machines)
 
+if repair:
+	server_job.repair_machines(machines)
+
+if verify or repair:
+	server_job.verify_machines(machines)
+	sys.exit(0)
+
 job = server_job.server_job(parser.args[0], parser.args[1:], results, label,
 								user, client)
 job.stdout.tee_redirect(os.path.join(results, 'debug', 'autoserv.stdout'))
diff --git a/server/server_job.py b/server/server_job.py
index 2815c5e..1e81e4c 100755
--- a/server/server_job.py
+++ b/server/server_job.py
@@ -72,6 +72,34 @@
 parallel_simple(install, machines, log=False)
 """
 
+# This needs more stuff in it. Check for diskspace, etc. But it's a start.
+verify="""\
+def cleanup(machine):
+	host = hosts.SSHHost(machine, initialize=False)
+	host.ssh_ping()
+
+parallel_simple(cleanup, machines, log=False)
+"""
+
+# This is pretty silly. Wait for s/w watchdog. Pray hard.
+repair="""\
+def cleanup(machine):
+	host = hosts.SSHHost(machine, initialize=False)
+	host.ssh_ping(150*60)            # wait for 2.5 hours
+
+parallel_simple(cleanup, machines, log=False)
+"""
+
+def verify_machines(machines):
+	namespace = {'machines' : machines, 'job' : None}
+	exec(preamble + verify, namespace, namespace)
+
+
+def repair_machines(machines):
+	namespace = {'machines' : machines, 'job' : None}
+	exec(preamble + repair, namespace, namespace)
+
+
 class server_job:
 	"""The actual job against which we do everything.