Mercurial > hg > autobot
annotate autobot/config.py @ 249:76b4f58df3ee
* enable a public HTML waterfall; * try to add an irc bot
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Wed, 28 Dec 2011 10:27:51 -0800 |
parents | 2161425d0ab7 |
children | 48bc52d51252 |
rev | line source |
---|---|
248
2161425d0ab7
whitespace cleanup + comments
Jeff Hammel <jhammel@mozilla.com>
parents:
200
diff
changeset
|
1 #!/usr/bin/env python |
2161425d0ab7
whitespace cleanup + comments
Jeff Hammel <jhammel@mozilla.com>
parents:
200
diff
changeset
|
2 |
84
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
3 """ |
248
2161425d0ab7
whitespace cleanup + comments
Jeff Hammel <jhammel@mozilla.com>
parents:
200
diff
changeset
|
4 tools for interpolating buildbot configuration |
84
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
5 """ |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
6 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
7 import sys |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
8 from projects import factories |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
9 from ConfigParser import RawConfigParser |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
10 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
11 class BuildbotIniConfig(object): |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
12 """ |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
13 class for getting a (for now, autobot-specific) |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
14 buildbot configuration from an .ini file |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
15 """ |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
16 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
17 def __init__(self, filename): |
248
2161425d0ab7
whitespace cleanup + comments
Jeff Hammel <jhammel@mozilla.com>
parents:
200
diff
changeset
|
18 |
2161425d0ab7
whitespace cleanup + comments
Jeff Hammel <jhammel@mozilla.com>
parents:
200
diff
changeset
|
19 # read the .ini file |
84
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
20 self.parser = RawConfigParser() |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
21 self.parser.read(filename) |
248
2161425d0ab7
whitespace cleanup + comments
Jeff Hammel <jhammel@mozilla.com>
parents:
200
diff
changeset
|
22 |
84
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
23 # get global information |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
24 master = ':master:' |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
25 self.master = self.section_dict(master) |
249
76b4f58df3ee
* enable a public HTML waterfall; * try to add an irc bot
Jeff Hammel <jhammel@mozilla.com>
parents:
248
diff
changeset
|
26 for port, default in ('slaveport', 9010), ('htmlport', 8010), ('publichtmlport', 8011): |
85 | 27 self.master[port] = int(self.master.get(port) or default) |
28 | |
29 # get section information | |
84
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
30 self.slaves = {} |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
31 self.args = {} |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
32 for section in self.parser.sections(): |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
33 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
34 # ignore master section -- we've already dealt with that |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
35 if section == master: |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
36 continue |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
37 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
38 # get slave |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
39 if section.startswith('slave:'): |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
40 name = section.split('slave:', 1)[-1] |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
41 slave_dict = self.master.copy() |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
42 slave_dict.update(self.section_dict(section)) |
189
cb9ad0b04140
preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
43 assert 'password' in slave_dict, 'Slave %s: must provide a password' % name |
cb9ad0b04140
preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
44 |
cb9ad0b04140
preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
45 # get factories |
151
700693fad00a
cleanup a few things found in testing multiple builders
Jeff Hammel <jhammel@mozilla.com>
parents:
128
diff
changeset
|
46 _factories = slave_dict.get('factories', '') |
700693fad00a
cleanup a few things found in testing multiple builders
Jeff Hammel <jhammel@mozilla.com>
parents:
128
diff
changeset
|
47 _factories = _factories.split() |
700693fad00a
cleanup a few things found in testing multiple builders
Jeff Hammel <jhammel@mozilla.com>
parents:
128
diff
changeset
|
48 if _factories == ['']: |
700693fad00a
cleanup a few things found in testing multiple builders
Jeff Hammel <jhammel@mozilla.com>
parents:
128
diff
changeset
|
49 _factories = [] |
700693fad00a
cleanup a few things found in testing multiple builders
Jeff Hammel <jhammel@mozilla.com>
parents:
128
diff
changeset
|
50 if _factories == ['*']: |
700693fad00a
cleanup a few things found in testing multiple builders
Jeff Hammel <jhammel@mozilla.com>
parents:
128
diff
changeset
|
51 _factories = factories.keys() |
189
cb9ad0b04140
preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
52 |
cb9ad0b04140
preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
53 # get platform information |
cb9ad0b04140
preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
54 platform = {} |
200
c1c804aae348
use a tuple not iterate over a string
Jeff Hammel <jhammel@mozilla.com>
parents:
189
diff
changeset
|
55 for key in ('os',): |
189
cb9ad0b04140
preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
56 if key in slave_dict: |
cb9ad0b04140
preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
57 platform[key] = slave_dict.pop(key) |
cb9ad0b04140
preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
58 else: |
cb9ad0b04140
preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
59 platform[key] = None |
cb9ad0b04140
preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
60 |
cb9ad0b04140
preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
61 # put it together coherently |
84
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
62 self.slaves[name] = {'password': slave_dict['password'], |
189
cb9ad0b04140
preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
63 'factories': _factories, |
cb9ad0b04140
preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents:
151
diff
changeset
|
64 'platform': platform } |
84
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
65 continue |
248
2161425d0ab7
whitespace cleanup + comments
Jeff Hammel <jhammel@mozilla.com>
parents:
200
diff
changeset
|
66 |
84
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
67 # get factories |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
68 self.args[section] = self.section_dict(section) |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
69 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
70 # TODO: schedulers + sources ([source:<factory>]) |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
71 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
72 def section_dict(self, section): |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
73 """ |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
74 returns the section as a dict |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
75 """ |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
76 if section in self.parser.sections(): |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
77 return dict(self.parser.items(section)) |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
78 else: |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
79 return {} |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
80 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
81 def main(args=sys.argv[1:]): |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
82 """parse the configuration, mostly for testing purposes""" |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
83 if len(args) != 1: |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
84 print 'Please provide an .ini file to try to parse' |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
85 sys.exit(1) |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
86 config = BuildbotIniConfig(args[0]) |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
87 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
88 if __name__ == '__main__': |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
89 main() |