blob: 3275fb486016f4fe66fc86d1f34cacefbce2cbcb [file] [log] [blame]
Aviv Keshet308e7362013-05-21 14:43:16 -07001#!/usr/bin/python
2# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6import os
7
8import common
9from autotest_lib.client.common_lib import control_data
beeps5e2bb4a2013-10-28 11:26:45 -070010from autotest_lib.client.common_lib import global_config
beeps5e2bb4a2013-10-28 11:26:45 -070011try:
12 # test that imports autoserv_utils for vm_tests
13 from autotest_lib.scheduler import drone_manager
14except ImportError as e:
15 drone_manager = None
16 pass
17
18AUTOTEST_INSTALL_DIR = global_config.global_config.get_config_value('SCHEDULER',
19 'drone_installation_directory')
20autoserv_directory = os.path.join(AUTOTEST_INSTALL_DIR, 'server')
21autoserv_path = os.path.join(autoserv_directory, 'autoserv')
22
Aviv Keshet308e7362013-05-21 14:43:16 -070023
24def autoserv_run_job_command(autoserv_directory, machines,
25 results_directory=None, extra_args=[], job=None,
26 queue_entry=None, verbose=True,
Aviv Keshetc14951a2013-08-12 18:17:35 -070027 write_pidfile=True, fast_mode=False,
Aviv Keshete43bccf2013-08-14 14:11:59 -070028 ssh_verbosity=0,
Aviv Keshetc5947fa2013-09-04 14:06:29 -070029 no_console_prefix=False,
Dan Shib669cbd2013-09-13 11:17:17 -070030 ssh_options=None,
31 use_packaging=True):
Aviv Keshet308e7362013-05-21 14:43:16 -070032 """
33 Construct an autoserv command from a job or host queue entry.
34
35 @param autoserv_directory: Absolute path to directory containing the
36 autoserv executable.
37 @param machines: A machine or comma separated list of machines to run
38 job on. Leave as None or empty string for hostless job
39 (String).
40 @param results_directory: Absolute path to directory in which to deposit
41 results.
42 @param extra_args: Additional arguments to pass to autoserv
43 (List of Strings).
44 @param job: Job object. If supplied, -u owner, -l name, and --test-retry,
45 and -c or -s (client or server) parameters will be added.
46 @param queue_entry: HostQueueEntry object. If supplied and no job
47 was supplied, this will be used to lookup the job.
48 @param verbose: Boolean (default: True) for autoserv verbosity.
49 @param write_pidfile: Boolean (default: True) for whether autoserv should
50 write a pidfile.
Christopher Wileyf6b5aae2013-07-09 10:14:02 -070051 @param fast_mode: bool to use fast mode (disables slow autotest features).
Aviv Keshetc14951a2013-08-12 18:17:35 -070052 @param ssh_verbosity: integer between 0 and 3 (inclusive) which sents the
53 verbosity level of ssh. Default: 0.
Aviv Keshete43bccf2013-08-14 14:11:59 -070054 @param no_console_prefix: If true, supress timestamps and other prefix info
55 in autoserv console logs.
Aviv Keshetc5947fa2013-09-04 14:06:29 -070056 @param ssh_options: A string giving extra arguments to be tacked on to
57 ssh commands.
Dan Shib669cbd2013-09-13 11:17:17 -070058 @param use_packaging Enable install modes that use the packaging system.
59
Aviv Keshet308e7362013-05-21 14:43:16 -070060 @returns The autoserv command line as a list of executable + parameters.
Dan Shib669cbd2013-09-13 11:17:17 -070061
Aviv Keshet308e7362013-05-21 14:43:16 -070062 """
63 command = [os.path.join(autoserv_directory, 'autoserv')]
64
65 if write_pidfile:
66 command.append('-p')
67
68 if results_directory:
69 command += ['-r', results_directory]
70
71 if machines:
72 command += ['-m', machines]
73
Aviv Keshetc14951a2013-08-12 18:17:35 -070074 if ssh_verbosity:
75 command += ['--ssh_verbosity', str(ssh_verbosity)]
76
Aviv Keshetc5947fa2013-09-04 14:06:29 -070077 if ssh_options:
78 command += ['--ssh_options', ssh_options]
79
Aviv Keshete43bccf2013-08-14 14:11:59 -070080 if no_console_prefix:
81 command += ['--no_console_prefix']
82
Aviv Keshet308e7362013-05-21 14:43:16 -070083 if job or queue_entry:
84 if not job:
85 job = queue_entry.job
86
87 owner = getattr(job, 'owner', None)
88 name = getattr(job, 'name', None)
89 test_retry = getattr(job, 'test_retry', None)
90 control_type = getattr(job, 'control_type', None)
91
92
93 if owner:
94 command += ['-u', owner]
95 if name:
96 command += ['-l', name]
97 if test_retry:
98 command += ['--test-retry='+str(test_retry)]
99 if control_type is not None: # still want to enter if control_type==0
100 control_type_value = control_data.CONTROL_TYPE.get_value(
101 control_type)
102 if control_type_value == control_data.CONTROL_TYPE.CLIENT:
103 command.append('-c')
104 elif control_type_value == control_data.CONTROL_TYPE.SERVER:
105 command.append('-s')
106
107 if verbose:
108 command.append('--verbose')
109
Christopher Wileyf6b5aae2013-07-09 10:14:02 -0700110 if fast_mode:
111 command.append('--disable_sysinfo')
112 command.append('--no_collect_crashinfo')
113
Dan Shib669cbd2013-09-13 11:17:17 -0700114 if not use_packaging:
115 command.append('--no_use_packaging')
116
Aviv Keshet308e7362013-05-21 14:43:16 -0700117 return command + extra_args
beeps5e2bb4a2013-10-28 11:26:45 -0700118
119
120def _autoserv_command_line(machines, extra_args, job=None, queue_entry=None,
121 verbose=True):
122 """
123 @returns The autoserv command line as a list of executable + parameters.
124
125 @param machines - string - A machine or comma separated list of machines
126 for the (-m) flag.
127 @param extra_args - list - Additional arguments to pass to autoserv.
128 @param job - Job object - If supplied, -u owner, -l name, --test-retry,
129 and client -c or server -s parameters will be added.
130 @param queue_entry - A HostQueueEntry object - If supplied and no Job
131 object was supplied, this will be used to lookup the Job object.
132 """
133 if drone_manager is None:
134 raise ImportError('Unable to import drone_manager in autoserv_utils')
135
136 return autoserv_run_job_command(autoserv_directory,
137 machines, results_directory=drone_manager.WORKING_DIRECTORY,
138 extra_args=extra_args, job=job, queue_entry=queue_entry,
139 verbose=verbose)