tripleo-common/tripleo_common/image/kolla_builder.py

77 lines
2.4 KiB
Python

# Copyright 2017 Red Hat, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
import logging
import os
import re
import subprocess
import sys
from tripleo_common.image import base
if sys.version_info[0] < 3:
import codecs
_open = open
open = codecs.open
class KollaImageBuilder(base.BaseImageManager):
"""Build images using kolla-build"""
logger = logging.getLogger(__name__ + '.KollaImageBuilder')
handler = logging.StreamHandler(sys.stdout)
@staticmethod
def imagename_to_regex(imagename):
if not imagename:
return
# remove any namespace from the start
imagename = imagename.split('/')[-1]
# remove any tag from the end
imagename = imagename.split(':')[0]
# remove supported base names from the start
imagename = re.sub(r'^(centos|rhel)-', '', imagename)
# remove install_type from the start
imagename = re.sub(r'^(binary|source|rdo|rhos)-', '', imagename)
# what results should be acceptable as a regex to build one image
return imagename
def build_images(self, kolla_config_files=None):
cmd = ['kolla-build']
if kolla_config_files:
for f in kolla_config_files:
cmd.append('--config-file')
cmd.append(f)
container_images = self.load_config_files(self.CONTAINER_IMAGES) or []
container_images.sort(key=lambda i: i.get('imagename'))
for i in container_images:
image = self.imagename_to_regex(i.get('imagename'))
if image:
cmd.append(image)
self.logger.info('Running %s' % ' '.join(cmd))
env = os.environ.copy()
process = subprocess.Popen(cmd, env=env)
process.wait()
if process.returncode != 0:
raise subprocess.CalledProcessError(process.returncode, cmd)