def _get_build_target(task_id): try: task = kojihub.Task(task_id) info = task.getInfo(request=True) request = info['request'] if info['method'] in ('build', 'maven'): # request is (source-url, build-target, map-of-other-options) if request[1]: return kojihub.get_build_target(request[1]) elif info['method'] == 'winbuild': # request is (vm-name, source-url, build-target, map-of-other-options) if request[2]: return kojihub.get_build_target(request[2]) except Exception as e: logger.error('Exception: %s', e) return None
def saveFailedTree(buildrootID, full=False, **opts): """Create saveFailedTree task If arguments are invalid, error message is returned. Otherwise task id of newly created task is returned.""" global config, allowed_methods # let it raise errors buildrootID = int(buildrootID) full = bool(full) # read configuration only once if config is None: config = six.moves.configparser.SafeConfigParser() config.read(CONFIG_FILE) allowed_methods = config.get('permissions', 'allowed_methods').split() if len(allowed_methods) == 1 and allowed_methods[0] == '*': allowed_methods = '*' brinfo = kojihub.get_buildroot(buildrootID, strict=True) taskID = brinfo['task_id'] task_info = kojihub.Task(taskID).getInfo() if task_info['state'] != koji.TASK_STATES['FAILED']: raise koji.PreBuildError( "Task %s has not failed. Only failed tasks can upload their buildroots." % taskID) elif allowed_methods != '*' and task_info['method'] not in allowed_methods: raise koji.PreBuildError("Only %s tasks can upload their buildroots (Task %s is %s)." % \ (', '.join(allowed_methods), task_info['id'], task_info['method'])) elif task_info[ "owner"] != context.session.user_id and not context.session.hasPerm( 'admin'): raise koji.ActionNotAllowed( "Only owner of failed task or 'admin' can run this task.") elif not kojihub.get_host(task_info['host_id'])['enabled']: raise koji.PreBuildError("Host is disabled.") args = koji.encode_args(buildrootID, full, **opts) taskopts = { 'assign': brinfo['host_id'], } return kojihub.make_task('saveFailedTree', args, **taskopts)
def get_message_body(topic, *args, **kws): msg = {} if topic == 'package.list.change': msg['tag'] = kws['tag']['name'] msg['package'] = kws['package']['name'] elif topic == 'task.state.change': info = kws['info'] # Stuff in information about descendant tasks task = kojihub.Task(info['id']) info['children'] = task.getChildren() # Send the whole info dict along because it might have useful info. # For instance, it contains the mention of what format createAppliance # is using (raw or qcow2). msg['info'] = info msg['method'] = kws['info']['method'] msg['attribute'] = kws['attribute'] msg['old'] = kws['old'] msg['new'] = kws['new'] msg['id'] = kws['info']['id'] # extract a useful identifier from the request string request = kws.get('info', {}).get('request', ['/']) msg['srpm'] = request[0].split('/')[-1] if 'owner_name' in info: msg['owner'] = info['owner_name'] elif 'owner_id' in info: msg['owner'] = kojihub.get_user(info['owner_id'])['name'] elif 'owner' in info: msg['owner'] = kojihub.get_user(info['owner'])['name'] else: msg['owner'] = None elif topic == 'build.state.change': info = kws['info'] msg['name'] = info['name'] msg['version'] = info['version'] msg['release'] = info['release'] msg['attribute'] = kws['attribute'] msg['old'] = kws['old'] msg['new'] = kws['new'] msg['build_id'] = info.get('id', None) msg['task_id'] = info.get('task_id', None) if msg['task_id']: task = kojihub.Task(msg['task_id']) msg['request'] = task.getRequest() else: msg['request'] = None if 'owner_name' in info: msg['owner'] = info['owner_name'] elif 'owner_id' in info: msg['owner'] = kojihub.get_user(info['owner_id'])['name'] elif 'owner' in info: msg['owner'] = kojihub.get_user(info['owner'])['name'] else: msg['owner'] = None elif topic == 'import': # TODO -- import is currently unused. # Should we remove it? msg['type'] = kws['type'] elif topic in ('tag', 'untag'): msg['tag'] = kws['tag']['name'] build = kws['build'] msg['name'] = build['name'] msg['version'] = build['version'] msg['release'] = build['release'] msg['user'] = kws['user']['name'] msg['owner'] = kojihub.get_user(kws['build']['owner_id'])['name'] msg['tag_id'] = kws['tag']['id'] msg['build_id'] = kws['build']['id'] elif topic == 'repo.init': msg['tag'] = kws['tag']['name'] msg['tag_id'] = kws['tag']['id'] msg['repo_id'] = kws['repo_id'] elif topic == 'repo.done': msg['tag'] = kws['repo']['tag_name'] msg['tag_id'] = kws['repo']['tag_id'] msg['repo_id'] = kws['repo']['id'] elif topic == 'rpm.sign': if 'attribute' in kws: # v1.10.1 and earlier msg['attribute'] = kws['attribute'] msg['old'] = kws['old'] msg['new'] = kws['new'] msg['info'] = kws['info'] else: # v1.11.0 (and maybe higher, but who knows) msg['sigkey'] = kws['sigkey'] msg['sighash'] = kws['sighash'] msg['build'] = kws['build'] msg['rpm'] = kws['rpm'] return msg