Mercurial > hg > SupervisorAdmin
annotate supervisoradmin/add.py @ 6:a1e06f4a8076
last minute tweaks
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Mon, 13 Apr 2015 13:04:11 -0700 |
parents | d638b8578c78 |
children |
rev | line source |
---|---|
0 | 1 #!/usr/bin/env python |
2 # -*- coding: utf-8 -*- | |
3 | |
4 """ | |
5 add supervisor jobs | |
6 """ | |
7 | |
8 # imports | |
9 import argparse | |
10 import os | |
1
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
11 import shlex |
0 | 12 import subprocess |
13 import sys | |
14 import time | |
15 | |
16 # module globals | |
1
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
17 __all__ = ['main', 'SupervisorAdminParser'] |
4
8a6ee9df8ae5
moving towards service restart
Jeff Hammel <k0scist@gmail.com>
parents:
3
diff
changeset
|
18 SUPERVISOR_CONF = '/etc/supervisor/conf.d' |
0 | 19 |
1
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
20 template = """[program:{name}] |
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
21 command={command} |
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
22 autorestart=true |
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
23 redirect_stderr=true |
6 | 24 startretries={retries} |
1
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
25 stopasgroup=true |
3 | 26 stopwaitsecs=180 |
1
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
27 user={user} |
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
28 """ |
0 | 29 |
4
8a6ee9df8ae5
moving towards service restart
Jeff Hammel <k0scist@gmail.com>
parents:
3
diff
changeset
|
30 def basename(filename): |
8a6ee9df8ae5
moving towards service restart
Jeff Hammel <k0scist@gmail.com>
parents:
3
diff
changeset
|
31 return os.path.splitext(os.path.basename(filename))[0] |
8a6ee9df8ae5
moving towards service restart
Jeff Hammel <k0scist@gmail.com>
parents:
3
diff
changeset
|
32 |
1
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
33 class SupervisorAdminParser(argparse.ArgumentParser): |
0 | 34 """CLI option parser""" |
35 def __init__(self, **kwargs): | |
36 kwargs.setdefault('formatter_class', argparse.RawTextHelpFormatter) | |
37 kwargs.setdefault('description', __doc__) | |
38 argparse.ArgumentParser.__init__(self, **kwargs) | |
1
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
39 self.add_argument('command', |
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
40 help="command to add") |
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
41 self.add_argument('-n', '--name', dest='name', |
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
42 help="name of program; by default taken from command") |
6 | 43 self.add_argument('-u', '--user', dest='user', default='root', |
1
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
44 help="run program as this user [DEFAULT: %(default)s]") |
6 | 45 self.add_argument('--retries', dest='retries', |
46 type=int, default=100, | |
47 help="number of retries [DEFAULT: %(default)s]") | |
4
8a6ee9df8ae5
moving towards service restart
Jeff Hammel <k0scist@gmail.com>
parents:
3
diff
changeset
|
48 self.add_argument('-o', '--output', dest='output', |
8a6ee9df8ae5
moving towards service restart
Jeff Hammel <k0scist@gmail.com>
parents:
3
diff
changeset
|
49 type=argparse.FileType('w'), |
8a6ee9df8ae5
moving towards service restart
Jeff Hammel <k0scist@gmail.com>
parents:
3
diff
changeset
|
50 nargs='?', |
8a6ee9df8ae5
moving towards service restart
Jeff Hammel <k0scist@gmail.com>
parents:
3
diff
changeset
|
51 const=sys.stdout, |
8a6ee9df8ae5
moving towards service restart
Jeff Hammel <k0scist@gmail.com>
parents:
3
diff
changeset
|
52 help="output configuration and exit [DEFAULT: %(default)s]") |
0 | 53 self.options = None |
54 | |
55 def parse_args(self, *args, **kw): | |
56 options = argparse.ArgumentParser.parse_args(self, *args, **kw) | |
57 self.validate(options) | |
58 self.options = options | |
59 return options | |
60 | |
61 def validate(self, options): | |
62 """validate options""" | |
63 | |
64 def main(args=sys.argv[1:]): | |
65 """CLI""" | |
66 | |
67 # parse command line options | |
1
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
68 parser = SupervisorAdminParser() |
0 | 69 options = parser.parse_args(args) |
70 | |
1
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
71 # get command |
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
72 command = shlex.split(options.command) |
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
73 if not command: |
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
74 parser.error("Please supply a command") |
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
75 |
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
76 # name |
4
8a6ee9df8ae5
moving towards service restart
Jeff Hammel <k0scist@gmail.com>
parents:
3
diff
changeset
|
77 name = options.name or basename(command[0]) |
8a6ee9df8ae5
moving towards service restart
Jeff Hammel <k0scist@gmail.com>
parents:
3
diff
changeset
|
78 |
8a6ee9df8ae5
moving towards service restart
Jeff Hammel <k0scist@gmail.com>
parents:
3
diff
changeset
|
79 # output configuration file |
5 | 80 output = options.output or open(os.path.join(SUPERVISOR_CONF, '{}.conf'.format(name)), 'w') |
1
ca51502dc8d3
basic template interpolation; we could do so much more!
Jeff Hammel <k0scist@gmail.com>
parents:
0
diff
changeset
|
81 |
5 | 82 output.write(template.format(name=name, |
83 user=options.user, | |
6 | 84 retries=options.retries, |
5 | 85 command=options.command)) |
86 output.close() | |
87 | |
88 if options.output is None: | |
89 # update the supervisor state | |
90 subprocess.check_call(['sudo', 'supervisorctl', 'update']) | |
0 | 91 |
92 if __name__ == '__main__': | |
93 main() |