blob: fc9859302fbdf352688d939d6a924654a4b9d39f [file] [log] [blame]
mbligha6f13082008-06-05 23:53:46 +00001import os, sys, getopt, optparse
mblighb7dcc7f2008-06-02 19:34:25 +00002
jadmanskifbc1f0a2008-07-09 14:12:54 +00003from autotest_lib.client.common_lib import host_protections
4
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()
18 self.parse_args()
mblighb7dcc7f2008-06-02 19:34:25 +000019
20
jadmanski0afbb632008-06-06 21:10:57 +000021 def setup_options(self):
22 self.parser.add_option("-m", action="store", type="string",
23 dest="machines",
24 help="list of machines")
25 self.parser.add_option("-M", action="store", type="string",
26 dest="machines_file",
27 help="list of machines from file")
28 self.parser.add_option("-c", action="store_true",
29 dest="client", default=False,
30 help="control file is client side")
mblighb2bea302008-07-24 20:25:57 +000031 self.parser.add_option("-s", action="store_true",
32 dest="server", default=False,
33 help="control file is server side")
jadmanski0afbb632008-06-06 21:10:57 +000034 self.parser.add_option("-r", action="store", type="string",
mbligh7cd30fd2008-10-21 16:25:19 +000035 dest="results", help="specify results directory")
jadmanski0afbb632008-06-06 21:10:57 +000036 self.parser.add_option("-l", action="store", type="string",
37 dest="label", default='',
38 help="label for the job")
39 self.parser.add_option("-u", action="store", type="string",
40 dest="user",
41 default=os.environ.get('USER'),
42 help="username for the job")
43 self.parser.add_option("-P", action="store", type="string",
44 dest="parse_job",
45 default='',
46 help="parse the results of the job")
47 self.parser.add_option("-i", action="store_true",
48 dest="install_before", default=False,
49 help="reinstall machines before running the job")
50 self.parser.add_option("-I", action="store_true",
51 dest="install_after", default=False,
52 help="reinstall machines after running the job")
jadmanski0afbb632008-06-06 21:10:57 +000053 self.parser.add_option("-v", action="store_true",
54 dest="verify", default=False,
55 help="verify the machines only")
56 self.parser.add_option("-R", action="store_true",
57 dest="repair", default=False,
58 help="repair the machines")
showard45ae8192008-11-05 19:32:53 +000059 self.parser.add_option("-C", "--cleanup", action="store_true",
60 default=False,
61 help="cleanup all machines after the job")
jadmanski0afbb632008-06-06 21:10:57 +000062 self.parser.add_option("-n", action="store_true",
63 dest="no_tee", default=False,
64 help="no teeing the status to stdout/err")
65 self.parser.add_option("-p", action="store_true",
66 dest="write_pidfile", default=False,
67 help="write pidfile (.autoserv_execute)")
jadmanskifbc1f0a2008-07-09 14:12:54 +000068 protection_levels = [host_protections.Protection.get_attr_name(s)
69 for i, s in host_protections.choices]
70 self.parser.add_option("--host-protection", action="store",
71 type="choice", dest="host_protection",
72 default=host_protections.default,
73 choices=protection_levels,
74 help="level of host protection during repair")
jadmanski0afbb632008-06-06 21:10:57 +000075 self.parser.add_option("--ssh-user", action="store",
76 type="string", dest="ssh_user",
77 default="root",
78 help=("specify the user for ssh"
79 "connections"))
80 self.parser.add_option("--ssh-port", action="store",
81 type="int", dest="ssh_port",
82 default=22,
83 help=("specify the port to use for "
84 "ssh connections"))
85 self.parser.add_option("--ssh-pass", action="store",
86 type="string", dest="ssh_pass",
87 default="",
88 help=("specify the password to use "
89 "for ssh connections"))
90
91
92 def parse_args(self):
93 (self.options, self.args) = self.parser.parse_args()
mblighb7dcc7f2008-06-02 19:34:25 +000094
95
96
97try:
jadmanski0afbb632008-06-06 21:10:57 +000098 from autotest_lib.server.site_autoserv_parser \
99 import site_autoserv_parser
mblighb7dcc7f2008-06-02 19:34:25 +0000100except ImportError:
jadmanski0afbb632008-06-06 21:10:57 +0000101 class site_autoserv_parser(base_autoserv_parser):
102 pass
mblighb7dcc7f2008-06-02 19:34:25 +0000103
104
105class autoserv_parser(site_autoserv_parser):
jadmanski0afbb632008-06-06 21:10:57 +0000106 pass
mblighb7dcc7f2008-06-02 19:34:25 +0000107
108
109# create the one and only one instance of autoserv_parser
110autoserv_parser = autoserv_parser()