Mercurial > hg > autobot
annotate autobot/config.py @ 84:86e65422f31a
have some sort of working configuration parser....lets roll with it
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Wed, 12 Jan 2011 11:13:52 -0800 |
parents | |
children | 65c91bf35a36 |
rev | line source |
---|---|
84
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
1 """ |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
2 tools for interpolating buildbot config |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
3 """ |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
4 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
5 import sys |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
6 from projects import factories |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
7 from ConfigParser import RawConfigParser |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
8 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
9 class BuildbotIniConfig(object): |
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 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
|
12 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
|
13 """ |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
14 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
15 def __init__(self, filename): |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
16 self.parser = RawConfigParser() |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
17 self.parser.read(filename) |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
18 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
19 # get global information |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
20 master = ':master:' |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
21 self.master = self.section_dict(master) |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
22 for port in 'slaveport', 'htmlport': |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
23 self.master[port] = int(self.master.get(port) or 9010) |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
24 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
25 self.slaves = {} |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
26 self.args = {} |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
27 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
|
28 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
29 # 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
|
30 if section == master: |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
31 continue |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
32 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
33 # get slave |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
34 if section.startswith('slave:'): |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
35 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
|
36 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
|
37 slave_dict.update(self.section_dict(section)) |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
38 assert 'password' in slave_dict, 'Slave %s: must provide a password' |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
39 factories = slave_dict.get('factories', '') |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
40 factories = factories.split() |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
41 if factories == ['']: |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
42 factories = [] |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
43 self.slaves[name] = {'password': slave_dict['password'], |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
44 'factories': factories } |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
45 continue |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
46 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
47 # get factories |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
48 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
|
49 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
50 # 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
|
51 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
52 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
|
53 """ |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
54 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
|
55 """ |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
56 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
|
57 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
|
58 else: |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
59 return {} |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
60 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
61 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
|
62 """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
|
63 if len(args) != 1: |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
64 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
|
65 sys.exit(1) |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
66 config = BuildbotIniConfig(args[0]) |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
67 import pdb; pdb.set_trace() |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
68 |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
69 if __name__ == '__main__': |
86e65422f31a
have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff
changeset
|
70 main() |