Mercurial > bitten > bitten-test
changeset 127:a9443f673344
Add option for specifying a [wiki:SlaveConfiguration configuration file] for the build slave. Closes #29.
author | cmlenz |
---|---|
date | Wed, 10 Aug 2005 11:51:52 +0000 |
parents | c2877512beb8 |
children | 4e3373472318 |
files | bitten/master.py bitten/slave.py |
diffstat | 2 files changed, 35 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/bitten/master.py +++ b/bitten/master.py @@ -226,6 +226,7 @@ if elem.name == 'register': self.name = elem.attr['name'] + self.info[Build.IP_ADDRESS] = self.session.addr[0] for child in elem.children(): if child.name == 'platform': self.info[Build.MACHINE] = child.gettext() @@ -234,7 +235,11 @@ self.info[Build.OS_NAME] = child.gettext() self.info[Build.OS_FAMILY] = child.attr.get('family') self.info[Build.OS_VERSION] = child.attr.get('version') - self.info[Build.IP_ADDRESS] = self.session.addr[0] + elif child.name == 'package': + for name, value in child.attr.items(): + if name == 'name': + continue + self.info[child.attr['name'] + '.' + name] = value if not self.master.register(self): xml = xmlio.Element('error', code=550)[
--- a/bitten/slave.py +++ b/bitten/slave.py @@ -18,6 +18,7 @@ # # Author: Christopher Lenz <cmlenz@gmx.de> +from ConfigParser import ConfigParser from datetime import datetime import logging import os @@ -36,9 +37,10 @@ class Slave(beep.Initiator): """Build slave.""" - def __init__(self, ip, port, name=None): + def __init__(self, ip, port, name=None, config=None): beep.Initiator.__init__(self, ip, port) self.name = name + self.config = config def greeting_received(self, profiles): if OrchestrationProfileHandler.URI not in profiles: @@ -73,10 +75,32 @@ version) if self.session.name is not None: node = self.session.name + + packages = [] + if self.session.config is not None: + log.debug('Merging configuration from %s', self.session.config) + config = ConfigParser() + config.read(self.session.config) + for section in config.sections(): + if section == 'machine': + machine = config.get(section, 'name', machine) + processor = config.get(section, 'processor', processor) + elif section == 'os': + system = config.get(section, 'name', system) + family = config.get(section, 'family', family) + release = config.get(section, 'version', release) + else: # a package + attrs = {} + for option in config.options(section): + attrs[option] = config.get(section, option) + packages.append(xmlio.Element('package', name=section, + **attrs)) + log.info('Registering with build master as %s', node) xml = xmlio.Element('register', name=node)[ xmlio.Element('platform', processor=processor)[machine], - xmlio.Element('os', family=os.name, version=release)[system] + xmlio.Element('os', family=os.name, version=release)[system], + xmlio.Fragment()[packages] ] self.channel.send_msg(beep.Payload(xml), handle_reply) @@ -199,6 +223,8 @@ version='%%prog %s' % VERSION) parser.add_option('-n', '--name', action='store', dest='name', help='name of this slave (defaults to host name)') + parser.add_option('-c', '--config', action='store', dest='config', + metavar='FILE', help='path to configuration file') parser.add_option('--debug', action='store_const', dest='loglevel', const=logging.DEBUG, help='enable debugging output') parser.add_option('-v', '--verbose', action='store_const', dest='loglevel', @@ -228,7 +254,7 @@ handler.setFormatter(formatter) log.addHandler(handler) - slave = Slave(host, port, options.name) + slave = Slave(host, port, options.name, options.config) try: slave.run() except KeyboardInterrupt: