Refactor a lot of the build create code out into a common method. Add an endpoint for manually starting triggers.

This commit is contained in:
jakedt 2014-02-25 19:39:43 -05:00
parent a6128978cb
commit 011490d36d
4 changed files with 150 additions and 84 deletions

View file

@ -1,12 +1,15 @@
import logging
import os
import base64
import urlparse
import json
from flask import session, make_response, render_template
from flask import session, make_response, render_template, request
from flask.ext.login import login_user, UserMixin
from flask.ext.principal import identity_changed
from data import model
from data.queue import dockerfile_build_queue
from app import app, login_manager
from auth.permissions import QuayDeferredPermissionUser
@ -115,3 +118,46 @@ def render_page_template(name, **kwargs):
**kwargs))
resp.headers['X-FRAME-OPTIONS'] = 'DENY'
return resp
def start_build(repository, dockerfile_id, tags, build_name, subdir, manual,
trigger=None):
host = urlparse.urlparse(request.url).netloc
repo_path = '%s/%s/%s' % (host, repository.namespace, repository.name)
token = model.create_access_token(repository, 'write')
logger.debug('Creating build %s with repo %s tags %s and dockerfile_id %s',
build_name, repo_path, tags, dockerfile_id)
job_config = {
'docker_tags': tags,
'repository': repo_path,
'build_subdir': subdir,
}
build_request = model.create_repository_build(repository, token, job_config,
dockerfile_id, build_name,
trigger)
dockerfile_build_queue.put(json.dumps({
'build_uuid': build_request.uuid,
'namespace': repository.namespace,
'repository': repository.name,
}), retries_remaining=1)
metadata = {
'repo': repository.name,
'namespace': repository.namespace,
'fileid': dockerfile_id,
'manual': manual,
}
if trigger:
metadata['trigger_id'] = trigger.uuid
metadata['config'] = json.loads(trigger.config)
metadata['service'] = trigger.service.name
model.log_action('build_dockerfile', repository.namespace,
ip=request.remote_addr, metadata=metadata,
repository=repository)
return build_request