Implement source fetching for build.py
This implements the source fetching that exists in the current way. The patch only implements fetching a tarball from a url. Additional methods needed would be git and local copy. Partially-Implements: blueprint build-script Change-Id: I51889a131f050abce9a16d114972b5e329a93862
This commit is contained in:
parent
671014e7a6
commit
0b605f305c
4
build.ini
Normal file
4
build.ini
Normal file
@ -0,0 +1,4 @@
|
||||
[keystone]
|
||||
type = url
|
||||
location = http://tarballs.openstack.org/keystone/keystone-master.tar.gz
|
||||
dest_filename = keystone.tar
|
@ -20,11 +20,13 @@
|
||||
# TODO(jpeeler): Add clean up handler for SIGINT
|
||||
|
||||
import argparse
|
||||
import ConfigParser
|
||||
import datetime
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import Queue
|
||||
import requests
|
||||
import shutil
|
||||
import signal
|
||||
import sys
|
||||
@ -66,6 +68,18 @@ class WorkerThread(Thread):
|
||||
traceback.print_exc()
|
||||
self.queue.task_done()
|
||||
|
||||
def process_source(self, source, dest_dir):
|
||||
if source['type'] == 'url':
|
||||
r = requests.get(source['source'])
|
||||
|
||||
if r.status_code == 200:
|
||||
with open(os.path.join(dest_dir, source['dest']), 'wb') as f:
|
||||
f.write(r.content)
|
||||
else:
|
||||
LOG.error(
|
||||
'Failed to download tarball: status_code {}'.format(
|
||||
r.status_code))
|
||||
|
||||
def builder(self, image):
|
||||
LOG.info('Processing: {}'.format(image['name']))
|
||||
image['status'] = "building"
|
||||
@ -75,6 +89,9 @@ class WorkerThread(Thread):
|
||||
image['status'] = "parent_error"
|
||||
return
|
||||
|
||||
if image['source']:
|
||||
self.process_source(image['source'], image['path'])
|
||||
|
||||
# Pull the latest image for the base distro only
|
||||
pull = True if image['parent'] is None else False
|
||||
|
||||
@ -92,6 +109,7 @@ class WorkerThread(Thread):
|
||||
if self.threads == 1:
|
||||
LOG.info('{}:{}'.format(image['name'],
|
||||
stream['stream'].rstrip()))
|
||||
|
||||
if 'errorDetail' in stream:
|
||||
image['status'] = "error"
|
||||
LOG.error(stream['errorDetail']['message'])
|
||||
@ -168,6 +186,8 @@ class KollaWorker(object):
|
||||
self.type_ = args['type']
|
||||
self.tag = args['tag']
|
||||
self.prefix = self.base + '-' + self.type_ + '-'
|
||||
self.config = ConfigParser.SafeConfigParser()
|
||||
self.config.read(os.path.join(sys.path[0], '..', 'build.ini'))
|
||||
|
||||
self.image_statuses_bad = {}
|
||||
self.image_statuses_good = {}
|
||||
@ -304,10 +324,23 @@ class KollaWorker(object):
|
||||
if self.namespace not in image['parent']:
|
||||
image['parent'] = None
|
||||
|
||||
if self.type_ == 'source':
|
||||
image['source'] = dict()
|
||||
try:
|
||||
image['source']['type'] = self.config.get(image['name'],
|
||||
'type')
|
||||
image['source']['source'] = self.config.get(image['name'],
|
||||
'location')
|
||||
image['source']['dest'] = self.config.get(image['name'],
|
||||
'dest_filename')
|
||||
except ConfigParser.NoSectionError:
|
||||
LOG.debug('No config found for {}'.format(image['name']))
|
||||
pass
|
||||
|
||||
self.images.append(image)
|
||||
|
||||
def buildQueues(self):
|
||||
"""Organizes Queue list
|
||||
"""Organizes Queue list
|
||||
|
||||
Return a list of Queues that have been organized into a hierarchy
|
||||
based on dependencies
|
||||
|
Loading…
x
Reference in New Issue
Block a user