Enable autoserv to operate without a results directory
This is incredibly useful for writing small, non-invasive scripts,
using the power of autoserv
Signed-off-by: Martin Bligh <[email protected]>
git-svn-id: http://test.kernel.org/svn/autotest/trunk@2444 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/server/autoserv b/server/autoserv
index e6d3a1a..9543801 100755
--- a/server/autoserv
+++ b/server/autoserv
@@ -64,8 +64,6 @@
if not realuser:
realuser = 'anonymous'
-
-
if parser.options.machines:
machines = parser.options.machines.replace(',', ' ').strip().split()
else:
@@ -123,15 +121,16 @@
job = server_job.server_job(control, parser.args[1:], results, label,
user, machines, client, parse_job,
ssh_user, ssh_port, ssh_pass)
- debug_dir = os.path.join(results, 'debug')
- stdout = os.path.join(debug_dir, 'autoserv.stdout')
- stderr = os.path.join(debug_dir, 'autoserv.stderr')
- if no_tee:
- job.stdout.redirect(stdout)
- job.stderr.redirect(stderr)
- else:
- job.stdout.tee_redirect(stdout)
- job.stderr.tee_redirect(stderr)
+ if results:
+ debug_dir = os.path.join(results, 'debug')
+ stdout = os.path.join(debug_dir, 'autoserv.stdout')
+ stderr = os.path.join(debug_dir, 'autoserv.stderr')
+ if no_tee:
+ job.stdout.redirect(stdout)
+ job.stderr.redirect(stderr)
+ else:
+ job.stdout.tee_redirect(stdout)
+ job.stderr.tee_redirect(stderr)
# perform checks
job.precheck()
@@ -176,18 +175,18 @@
sys.exit(1)
print "Results placed in %s" % results
- results = parser.options.results
- if not results:
- results = 'results.' + time.strftime('%Y-%m-%d-%H.%M.%S')
- results = os.path.abspath(results)
- if os.path.exists(os.path.join(results, 'control.srv')):
- error = "Error: results directory already exists: %s\n" % results
- sys.stderr.write(error)
- sys.exit(1)
- print "Results placed in %s" % results
+ results = parser.options.results
+ if not parser.options.no_logging:
+ if not results:
+ results = 'results.' + time.strftime('%Y-%m-%d-%H.%M.%S')
+ results = os.path.abspath(results)
+ if os.path.exists(os.path.join(results, 'control.srv')):
+ error = "Error: results directory already exists: %s\n" % results
+ sys.stderr.write(error)
+ sys.exit(1)
+ print "Results placed in %s" % results
- write_pidfile = parser.options.write_pidfile
- if write_pidfile:
+ if parser.options.write_pidfile:
pid_file_manager.open_pid_file(results)
exit_code = 0
diff --git a/server/autoserv_parser.py b/server/autoserv_parser.py
index fc98593..490324f 100644
--- a/server/autoserv_parser.py
+++ b/server/autoserv_parser.py
@@ -32,7 +32,8 @@
dest="server", default=False,
help="control file is server side")
self.parser.add_option("-r", action="store", type="string",
- dest="results", help="specify results directory")
+ dest="results", default=None,
+ help="specify results directory")
self.parser.add_option("-l", action="store", type="string",
dest="label", default='',
help="label for the job")
@@ -62,6 +63,9 @@
self.parser.add_option("-n", action="store_true",
dest="no_tee", default=False,
help="no teeing the status to stdout/err")
+ self.parser.add_option("-N", action="store_true",
+ dest="no_logging", default=False,
+ help="no logging")
self.parser.add_option("-p", action="store_true",
dest="write_pidfile", default=False,
help="write pidfile (.autoserv_execute)")
diff --git a/server/server_job.py b/server/server_job.py
index f428914..cf404ad 100755
--- a/server/server_job.py
+++ b/server/server_job.py
@@ -100,12 +100,15 @@
else:
self.control = ''
self.resultdir = resultdir
- if not os.path.exists(resultdir):
- os.mkdir(resultdir)
- self.debugdir = os.path.join(resultdir, 'debug')
- if not os.path.exists(self.debugdir):
- os.mkdir(self.debugdir)
- self.status = os.path.join(resultdir, 'status')
+ if resultdir:
+ if not os.path.exists(resultdir):
+ os.mkdir(resultdir)
+ self.debugdir = os.path.join(resultdir, 'debug')
+ if not os.path.exists(self.debugdir):
+ os.mkdir(self.debugdir)
+ self.status = os.path.join(resultdir, 'status')
+ else:
+ self.status = None
self.label = label
self.user = user
self.args = args
@@ -123,7 +126,8 @@
self.stdout = fd_stack.fd_stack(1, sys.stdout)
self.stderr = fd_stack.fd_stack(2, sys.stderr)
- self.sysinfo = sysinfo.sysinfo(self.resultdir)
+ if resultdir:
+ self.sysinfo = sysinfo.sysinfo(self.resultdir)
if not os.access(self.tmpdir, os.W_OK):
try:
@@ -145,13 +149,14 @@
# exception.
os.chmod(self.tmpdir, stat.S_IRWXU)
- if os.path.exists(self.status):
+ if self.status and os.path.exists(self.status):
os.unlink(self.status)
job_data = {'label' : label, 'user' : user,
'hostname' : ','.join(machines),
'status_version' : str(self.STATUS_VERSION)}
- job_data.update(get_site_job_data(self))
- utils.write_keyval(self.resultdir, job_data)
+ if self.resultdir:
+ job_data.update(get_site_job_data(self))
+ utils.write_keyval(self.resultdir, job_data)
self.parse_job = parse_job
if self.parse_job and len(machines) == 1:
@@ -320,10 +325,11 @@
namespace['ssh_pass'] = self.ssh_pass
test_start_time = int(time.time())
- os.chdir(self.resultdir)
+ if self.resultdir:
+ os.chdir(self.resultdir)
- self.enable_external_logging()
- status_log = os.path.join(self.resultdir, 'status.log')
+ self.enable_external_logging()
+ status_log = os.path.join(self.resultdir, 'status.log')
collect_crashinfo = True
try:
if install_before and machines: