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.