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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
65c91bf35a36 deal with port defaults
Jeff Hammel <jhammel@mozilla.com>
parents: 84
diff changeset
27 self.master[port] = int(self.master.get(port) or default)
65c91bf35a36 deal with port defaults
Jeff Hammel <jhammel@mozilla.com>
parents: 84
diff changeset
28
65c91bf35a36 deal with port defaults
Jeff Hammel <jhammel@mozilla.com>
parents: 84
diff changeset
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()