From fca1e0658acbc9e09d8ace9ab648bd56601fe24a Mon Sep 17 00:00:00 2001 From: Sam Yaple Date: Tue, 28 Jul 2015 13:36:06 +0000 Subject: [PATCH] Adds push to build script This works as is, but could use some cleaning up and threading needs to be confirmed broken. If it isn't broken, it should be implemented. Co-Authored-By: Swapnil Kulkarni Change-Id: I708406dcff8aa9b2f4064f03bda07873ce97d994 Paritally-Implements: blueprint build-script --- tools/build.py | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/tools/build.py b/tools/build.py index 11f23f6036..ac471960b3 100755 --- a/tools/build.py +++ b/tools/build.py @@ -111,7 +111,11 @@ def argParser(): action='store_true', default=False) parser.add_argument('--keep', - help='Keep failed intermediate containers building', + help='Keep failed intermediate containers', + action='store_true', + default=False) + parser.add_argument('--push', + help='Push images after building', action='store_true', default=False) parser.add_argument('-T', '--threads', @@ -248,20 +252,45 @@ class KollaWorker(object): return pools +def push_image(image): + dc = docker.Client(**docker.utils.kwargs_from_env()) + + image['push_logs'] = str() + for response in dc.push(image['fullname'], + stream=True, + insecure_registry=True): + stream = json.loads(response) + + if 'stream' in stream: + image['push_logs'] = image['logs'] + stream['stream'] + # This is only single threaded for right now so we can show logs + print(stream['stream']) + elif 'errorDetail' in stream: + image['status'] = "error" + raise Exception(stream['errorDetail']['message']) + + def main(): args = argParser() kolla = KollaWorker(args) kolla.setupWorkingDir() kolla.findDockerfiles() + pools = kolla.buildQueues() # Returns a list of Queues for us to loop through - for pool in kolla.buildQueues(): + for pool in pools: for x in xrange(args['threads']): WorkerThread(pool, args['no_cache'], args['keep']).start() # block until queue is empty pool.join() + if args['push']: + for tier in kolla.tiers: + for image in tier: + if image['status'] == "built": + push_image(image) + kolla.summary() kolla.cleanup()