Update the buildserver to use the new post format.

This commit is contained in:
yackob03 2013-10-25 18:14:35 -04:00
parent 684ce83058
commit c5ff08e57d
5 changed files with 34 additions and 25 deletions

View file

@ -13,13 +13,12 @@ ADD https://get.docker.io/builds/Linux/x86_64/docker-latest /usr/local/bin/docke
# Install the files # Install the files
ADD ./startserver /usr/local/bin/startserver ADD ./startserver /usr/local/bin/startserver
ADD ./buildserver.py ./buildserver.py ADD ./buildserver.py ./buildserver.py
ADD ./test.html ./test.html ADD ./requirements.txt ./requirements.txt
ADD ./requirements-nover.txt ./requirements-nover.txt
RUN chmod +x /usr/local/bin/docker /usr/local/bin/startserver RUN chmod +x /usr/local/bin/docker /usr/local/bin/startserver
RUN virtualenv --distribute venv RUN virtualenv --distribute venv
RUN venv/bin/pip install -r requirements-nover.txt RUN venv/bin/pip install -r requirements.txt
VOLUME /var/lib/docker VOLUME /var/lib/docker

View file

@ -4,12 +4,14 @@ import shutil
import os import os
import re import re
import requests import requests
import json
from flask import Flask, request, send_file, jsonify, redirect, url_for, abort from flask import Flask, request, jsonify, url_for, abort, make_response
from zipfile import ZipFile from zipfile import ZipFile
from tempfile import TemporaryFile, mkdtemp from tempfile import TemporaryFile, mkdtemp
from uuid import uuid4 from uuid import uuid4
from multiprocessing.pool import ThreadPool from multiprocessing.pool import ThreadPool
from base64 import b64encode
BUFFER_SIZE = 8 * 1024 BUFFER_SIZE = 8 * 1024
@ -20,11 +22,6 @@ app = Flask(__name__)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@app.route('/')
def index():
return send_file('test.html')
def count_steps(dockerfile_path): def count_steps(dockerfile_path):
with open(dockerfile_path, 'r') as dockerfileobj: with open(dockerfile_path, 'r') as dockerfileobj:
steps = 0 steps = 0
@ -58,7 +55,7 @@ def prepare_dockerfile(request_file):
def build_image(build_dir, tag_name, num_steps, result_object): def build_image(build_dir, tag_name, num_steps, result_object):
try: try:
logger.debug('Does this show up?') logger.debug('Starting build.')
docker_cl = docker.Client(version='1.5') docker_cl = docker.Client(version='1.5')
result_object['status'] = 'building' result_object['status'] = 'building'
build_status = docker_cl.build(path=build_dir, tag=tag_name) build_status = docker_cl.build(path=build_dir, tag=tag_name)
@ -145,9 +142,29 @@ pool = ThreadPool(1)
def start_build(): def start_build():
resource_url = request.values['resource_url'] resource_url = request.values['resource_url']
tag_name = request.values['tag'] tag_name = request.values['tag']
acccess_token = request.values['token']
download_resource = requests.get(resource_url) # Save the token
download_resource.get() host = re.match(r'([a-z0-9.:]+)/.+/.+$', tag_name)
if host:
docker_endpoint = 'http://%s/v1/' % host.group(0)
dockercfg_path = os.path.join(os.environ.get('HOME', '.'), '.dockercfg')
token = b64encode('$token:%s' % acccess_token)
with open(dockercfg_path, 'w') as dockercfg:
payload = {
docker_endpoint: {
'auth': token,
'email': '',
}
}
dockercfg.write(json.dumps(payload))
else:
logger.warning('Invalid tag name: %s' % tag_name)
abort(400)
docker_resource = requests.get(resource_url)
c_type = docker_resource.headers['content-type']
logger.info('Request to build file of type: %s with tag: %s' % logger.info('Request to build file of type: %s with tag: %s' %
(c_type, tag_name)) (c_type, tag_name))
@ -156,7 +173,7 @@ def start_build():
logger.error('Invalid dockerfile content type: %s' % c_type) logger.error('Invalid dockerfile content type: %s' % c_type)
abort(400) abort(400)
build_dir = MIME_PROCESSORS[c_type](docker_input) build_dir = MIME_PROCESSORS[c_type](docker_resource)
dockerfile_path = os.path.join(build_dir, "Dockerfile") dockerfile_path = os.path.join(build_dir, "Dockerfile")
num_steps = count_steps(dockerfile_path) num_steps = count_steps(dockerfile_path)

View file

@ -1,3 +0,0 @@
flask
requests
-e git+git://github.com/DevTable/docker-py.git#egg=docker-py

View file

@ -0,0 +1,5 @@
mock==1.0.1
requests==1.2.3
six==1.3.0
flask==0.10.1
-e git+git://github.com/DevTable/docker-py.git#egg=docker-py

View file

@ -1,9 +0,0 @@
<html>
<body>
<form enctype='multipart/form-data' method="post" action="/build/">
<input type="file" name="dockerfile">
<input type="text" name="tag">
<button type="submit">Send</button>
</form>
</body>
</html>