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: