Merge "Allow fetching plugins as part of the build"

This commit is contained in:
Jenkins 2015-12-08 10:17:46 +00:00 committed by Gerrit Code Review
commit b121d3cf3b

View File

@ -95,9 +95,8 @@ class WorkerThread(Thread):
break
self.end_task(image)
def process_source(self, image):
source = image['source']
dest_archive = os.path.join(image['path'], image['name'] + '-archive')
def process_source(self, image, source):
dest_archive = os.path.join(image['path'], source['name'] + '-archive')
if source.get('type') == 'url':
LOG.debug("{}:Getting archive from {}".format(image['name'],
@ -145,6 +144,8 @@ class WorkerThread(Thread):
# Set time on destination archive to epoch 0
os.utime(dest_archive, (0, 0))
return dest_archive
def builder(self, image):
LOG.debug('{}:Processing'.format(image['name']))
if image['status'] == 'unmatched':
@ -162,10 +163,27 @@ class WorkerThread(Thread):
LOG.info('{}:Building'.format(image['name']))
if 'source' in image and 'source' in image['source']:
self.process_source(image)
self.process_source(image, image['source'])
if image['status'] == "error":
return
plugin_archives = list()
for plugin in image['plugins']:
archive_path = self.process_source(image, plugin)
if image['status'] == "error":
return
plugin_archives.append(archive_path)
if plugin_archives:
for plugin_archive in plugin_archives:
with tarfile.open(plugin_archive, 'r') as plugin_archive_tar:
plugin_archive_tar.extractall(
path=os.path.join(image['path'], 'plugins'))
else:
os.mkdir(os.path.join(image['path'], 'plugins'))
with tarfile.open(os.path.join(image['path'], 'plugins-archive'),
'w') as tar:
tar.add(os.path.join(image['path'], 'plugins'), arcname='plugins')
# Pull the latest image for the base distro only
pull = True if image['parent'] is None else False
@ -517,6 +535,21 @@ class KollaWorker(object):
self.image_statuses_unmatched)
def build_image_list(self):
def process_source_installation(image, section):
installation = dict()
try:
installation['type'] = \
self.source_location.get(section, 'type')
installation['source'] = \
self.source_location.get(section, 'location')
installation['name'] = section
if installation['type'] == 'git':
installation['reference'] = \
self.source_location.get(section, 'reference')
except six.moves.configparser.NoSectionError:
LOG.debug('{}:No source location found'.format(section))
return installation
for path in self.docker_build_paths:
# Reading parent image name
with open(os.path.join(path, 'Dockerfile')) as f:
@ -532,23 +565,17 @@ class KollaWorker(object):
if not image['parent_name'].startswith(self.namespace + '/'):
image['parent'] = None
image['children'] = list()
image['plugins'] = list()
if self.install_type == 'source':
image['source'] = dict()
try:
image['source']['type'] = \
self.source_location.get(image['name'], 'type')
image['source']['source'] = \
self.source_location.get(image['name'], 'location')
if image['source']['type'] == 'git':
image['source']['reference'] = \
self.source_location.get(image['name'],
'reference')
except six.moves.configparser.NoSectionError:
LOG.debug('{}:No source location found'.format(
image['name']))
pass
image['source'] = \
process_source_installation(image, image['name'])
for plugin in [match.group(0) for match in
(re.search('{}-plugin-.+'.format(image['name']),
section) for section in
self.source_location.sections()) if match]:
image['plugins'].append(
process_source_installation(image, plugin))
self.images.append(image)