aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-12-08 10:17:46 +0000
committerGerrit Code Review <review@openstack.org>2015-12-08 10:17:46 +0000
commitb121d3cf3bf4120e32ac6ea67d463367b4c66889 (patch)
tree370a995e1b7d4bc8819c2322b85d17826cb877bc
parent8ee78949ffb785cfcaab541e048432f38eedb4ba (diff)
parent2581e3099c14640a860c318aa3c49fa63d32adc6 (diff)
downloadkolla-b121d3cf3bf4120e32ac6ea67d463367b4c66889.tar.gz
kolla-b121d3cf3bf4120e32ac6ea67d463367b4c66889.zip
Merge "Allow fetching plugins as part of the build"
-rwxr-xr-xkolla/cmd/build.py65
1 files changed, 46 insertions, 19 deletions
diff --git a/kolla/cmd/build.py b/kolla/cmd/build.py
index eea857a22..dba153458 100755
--- a/kolla/cmd/build.py
+++ b/kolla/cmd/build.py
@@ -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)