annotate autobot/config.py @ 303:84b400e78b64

STUB: autobot/config.py
author Jeff Hammel <k0scist@gmail.com>
date Sun, 11 May 2014 09:59:34 -0700
parents b854e599bf85
children 7b5ffdcd25c0
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)
265
b854e599bf85 remove hopefully unnecessary obfuscation
Jeff Hammel <jhammel@mozilla.com>
parents: 259
diff changeset
28 channels = self.master.get('channels', '').strip()
b854e599bf85 remove hopefully unnecessary obfuscation
Jeff Hammel <jhammel@mozilla.com>
parents: 259
diff changeset
29 if channels:
250
48bc52d51252 make irc configurable
Jeff Hammel <jhammel@mozilla.com>
parents: 249
diff changeset
30 self.master['channels'] = channels.split()
48bc52d51252 make irc configurable
Jeff Hammel <jhammel@mozilla.com>
parents: 249
diff changeset
31 else:
48bc52d51252 make irc configurable
Jeff Hammel <jhammel@mozilla.com>
parents: 249
diff changeset
32 self.master['channels'] = []
85
65c91bf35a36 deal with port defaults
Jeff Hammel <jhammel@mozilla.com>
parents: 84
diff changeset
33
65c91bf35a36 deal with port defaults
Jeff Hammel <jhammel@mozilla.com>
parents: 84
diff changeset
34 # get section information
84
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
35 self.slaves = {}
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
36 self.args = {}
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
37 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
38
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
39 # 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
40 if section == master:
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
41 continue
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
42
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
43 # get slave
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
44 if section.startswith('slave:'):
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
45 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
46 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
47 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
48 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
49
cb9ad0b04140 preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents: 151
diff changeset
50 # get factories
151
700693fad00a cleanup a few things found in testing multiple builders
Jeff Hammel <jhammel@mozilla.com>
parents: 128
diff changeset
51 _factories = slave_dict.get('factories', '')
700693fad00a cleanup a few things found in testing multiple builders
Jeff Hammel <jhammel@mozilla.com>
parents: 128
diff changeset
52 _factories = _factories.split()
700693fad00a cleanup a few things found in testing multiple builders
Jeff Hammel <jhammel@mozilla.com>
parents: 128
diff changeset
53 if _factories == ['']:
700693fad00a cleanup a few things found in testing multiple builders
Jeff Hammel <jhammel@mozilla.com>
parents: 128
diff changeset
54 _factories = []
700693fad00a cleanup a few things found in testing multiple builders
Jeff Hammel <jhammel@mozilla.com>
parents: 128
diff changeset
55 if _factories == ['*']:
700693fad00a cleanup a few things found in testing multiple builders
Jeff Hammel <jhammel@mozilla.com>
parents: 128
diff changeset
56 _factories = factories.keys()
189
cb9ad0b04140 preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents: 151
diff changeset
57
cb9ad0b04140 preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents: 151
diff changeset
58 # get platform information
cb9ad0b04140 preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents: 151
diff changeset
59 platform = {}
200
c1c804aae348 use a tuple not iterate over a string
Jeff Hammel <jhammel@mozilla.com>
parents: 189
diff changeset
60 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
61 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
62 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
63 else:
cb9ad0b04140 preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents: 151
diff changeset
64 platform[key] = None
cb9ad0b04140 preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents: 151
diff changeset
65
cb9ad0b04140 preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents: 151
diff changeset
66 # 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
67 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
68 'factories': _factories,
cb9ad0b04140 preliminary passing of platform information from slaves; not yet tested
Jeff Hammel <jhammel@mozilla.com>
parents: 151
diff changeset
69 'platform': platform }
84
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
70 continue
248
2161425d0ab7 whitespace cleanup + comments
Jeff Hammel <jhammel@mozilla.com>
parents: 200
diff changeset
71
84
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
72 # get factories
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
73 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
74
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
75 # 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
76
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
77 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
78 """
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
79 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
80 """
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
81 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
82 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
83 else:
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
84 return {}
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
85
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
86 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
87 """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
88 if len(args) != 1:
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
89 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
90 sys.exit(1)
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
91 config = BuildbotIniConfig(args[0])
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
92
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
93 if __name__ == '__main__':
86e65422f31a have some sort of working configuration parser....lets roll with it
Jeff Hammel <jhammel@mozilla.com>
parents:
diff changeset
94 main()