blob: 7fe8fa85f0752c0609f10a795c2bd3727c5ae605 [file] [log] [blame]
mbligha6f13082008-06-05 23:53:46 +00001import os, sys, getopt, optparse
mblighb7dcc7f2008-06-02 19:34:25 +00002
mbligha7007722009-01-13 00:37:11 +00003from autotest_lib.client.common_lib import host_protections, utils
jadmanskifbc1f0a2008-07-09 14:12:54 +00004
mblighb7dcc7f2008-06-02 19:34:25 +00005
6class base_autoserv_parser(object):
jadmanski0afbb632008-06-06 21:10:57 +00007 """Custom command-line options parser for autoserv.
mblighb7dcc7f2008-06-02 19:34:25 +00008
jadmanski0afbb632008-06-06 21:10:57 +00009 We can't use the general getopt methods here, as there will be unknown
10 extra arguments that we pass down into the control file instead.
11 Thus we process the arguments by hand, for which we are duly repentant.
12 Making a single function here just makes it harder to read. Suck it up.
13 """
14 def __init__(self):
15 self.args = sys.argv[1:]
16 self.parser = optparse.OptionParser()
17 self.setup_options()
mblighb7dcc7f2008-06-02 19:34:25 +000018
mblighf82a1822009-02-26 00:47:14 +000019 # parse an empty list of arguments in order to set self.options
20 # to default values so that codepaths that assume they are always
21 # reached from an autoserv process (when they actually are not)
22 # will still work
23 self.options, self.args = self.parser.parse_args(args=[])
24
mblighb7dcc7f2008-06-02 19:34:25 +000025
jadmanski0afbb632008-06-06 21:10:57 +000026 def setup_options(self):
27 self.parser.add_option("-m", action="store", type="string",
28 dest="machines",
29 help="list of machines")
30 self.parser.add_option("-M", action="store", type="string",
31 dest="machines_file",
32 help="list of machines from file")
33 self.parser.add_option("-c", action="store_true",
34 dest="client", default=False,
35 help="control file is client side")
mblighb2bea302008-07-24 20:25:57 +000036 self.parser.add_option("-s", action="store_true",
37 dest="server", default=False,
38 help="control file is server side")
jadmanski0afbb632008-06-06 21:10:57 +000039 self.parser.add_option("-r", action="store", type="string",
mbligh80e1eba2008-11-19 00:26:18 +000040 dest="results", default=None,
41 help="specify results directory")
jadmanski0afbb632008-06-06 21:10:57 +000042 self.parser.add_option("-l", action="store", type="string",
43 dest="label", default='',
44 help="label for the job")
45 self.parser.add_option("-u", action="store", type="string",
46 dest="user",
47 default=os.environ.get('USER'),
48 help="username for the job")
49 self.parser.add_option("-P", action="store", type="string",
50 dest="parse_job",
51 default='',
52 help="parse the results of the job")
53 self.parser.add_option("-i", action="store_true",
54 dest="install_before", default=False,
55 help="reinstall machines before running the job")
56 self.parser.add_option("-I", action="store_true",
57 dest="install_after", default=False,
58 help="reinstall machines after running the job")
jadmanski0afbb632008-06-06 21:10:57 +000059 self.parser.add_option("-v", action="store_true",
60 dest="verify", default=False,
61 help="verify the machines only")
62 self.parser.add_option("-R", action="store_true",
63 dest="repair", default=False,
64 help="repair the machines")
showard45ae8192008-11-05 19:32:53 +000065 self.parser.add_option("-C", "--cleanup", action="store_true",
66 default=False,
67 help="cleanup all machines after the job")
jadmanski0afbb632008-06-06 21:10:57 +000068 self.parser.add_option("-n", action="store_true",
69 dest="no_tee", default=False,
70 help="no teeing the status to stdout/err")
mbligh80e1eba2008-11-19 00:26:18 +000071 self.parser.add_option("-N", action="store_true",
72 dest="no_logging", default=False,
73 help="no logging")
jadmanskid5ab8c52008-12-03 16:27:07 +000074 self.parser.add_option("-p", "--write-pidfile", action="store_true",
jadmanski0afbb632008-06-06 21:10:57 +000075 dest="write_pidfile", default=False,
jadmanskid5ab8c52008-12-03 16:27:07 +000076 help="write pidfile (.autoserv_execute)")
jadmanskifbc1f0a2008-07-09 14:12:54 +000077 protection_levels = [host_protections.Protection.get_attr_name(s)
78 for i, s in host_protections.choices]
79 self.parser.add_option("--host-protection", action="store",
80 type="choice", dest="host_protection",
81 default=host_protections.default,
82 choices=protection_levels,
83 help="level of host protection during repair")
jadmanski0afbb632008-06-06 21:10:57 +000084 self.parser.add_option("--ssh-user", action="store",
85 type="string", dest="ssh_user",
86 default="root",
87 help=("specify the user for ssh"
88 "connections"))
89 self.parser.add_option("--ssh-port", action="store",
90 type="int", dest="ssh_port",
91 default=22,
92 help=("specify the port to use for "
93 "ssh connections"))
94 self.parser.add_option("--ssh-pass", action="store",
95 type="string", dest="ssh_pass",
96 default="",
97 help=("specify the password to use "
98 "for ssh connections"))
jadmanskif22fea82008-11-26 20:57:07 +000099 self.parser.add_option("--install-in-tmpdir", action="store_true",
100 dest="install_in_tmpdir", default=False,
101 help=("by default install autotest clients in "
102 "a temporary directory"))
jadmanski0afbb632008-06-06 21:10:57 +0000103
104
105 def parse_args(self):
mblighf82a1822009-02-26 00:47:14 +0000106 self.options, self.args = self.parser.parse_args()
mblighb7dcc7f2008-06-02 19:34:25 +0000107
108
mbligha7007722009-01-13 00:37:11 +0000109site_autoserv_parser = utils.import_site_class(
110 __file__, "autotest_lib.server.site_autoserv_parser",
111 "site_autoserv_parser", base_autoserv_parser)
mblighb7dcc7f2008-06-02 19:34:25 +0000112
113class autoserv_parser(site_autoserv_parser):
jadmanski0afbb632008-06-06 21:10:57 +0000114 pass
mblighb7dcc7f2008-06-02 19:34:25 +0000115
116
117# create the one and only one instance of autoserv_parser
118autoserv_parser = autoserv_parser()