![Steve Baker](/assets/img/avatar_default.png)
This will allow this file to be used for both uploading and image building. The old 'uploads' key will continue to work. Change-Id: Ie09d784119e53b90e5ad0c9028459486cff177c7
85 lines
3.3 KiB
Python
85 lines
3.3 KiB
Python
# Copyright 2015 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 os
|
|
import re
|
|
|
|
from oslo_log import log
|
|
from oslo_utils import strutils
|
|
|
|
from tripleo_common.image.base import BaseImageManager
|
|
from tripleo_common.image.exception import ImageSpecificationException
|
|
from tripleo_common.image.image_builder import ImageBuilder
|
|
|
|
|
|
class ImageBuildManager(BaseImageManager):
|
|
"""Manage the building of image files
|
|
|
|
Manage the building of images from a config file specified in YAML
|
|
syntax. Multiple config files can be specified. They will be merged
|
|
"""
|
|
logger = log.getLogger(__name__ + '.ImageBuildManager')
|
|
|
|
APPEND_ATTRIBUTES = BaseImageManager.APPEND_ATTRIBUTES + ['environment']
|
|
|
|
def __init__(self, config_files, images=None, output_directory='.',
|
|
skip=False):
|
|
super(ImageBuildManager, self).__init__(config_files, images)
|
|
self.output_directory = re.sub('[/]$', '', output_directory)
|
|
self.skip = skip
|
|
|
|
def build(self):
|
|
"""Start the build process"""
|
|
|
|
self.logger.info('Using config files: %s' % self.config_files)
|
|
|
|
disk_images = self.load_config_files(self.DISK_IMAGES)
|
|
|
|
for image in disk_images:
|
|
arch = image.get('arch', 'amd64')
|
|
image_type = image.get('type', 'qcow2')
|
|
image_name = image.get('imagename')
|
|
builder = image.get('builder', 'dib')
|
|
skip_base = strutils.bool_from_string(
|
|
image.get('skip_base', False))
|
|
docker_target = image.get('docker_target')
|
|
node_dist = image.get('distro')
|
|
if node_dist is None:
|
|
raise ImageSpecificationException('distro is required')
|
|
self.logger.info('imagename: %s' % image_name)
|
|
image_extension = image.get('imageext', image_type)
|
|
image_path = os.path.join(self.output_directory, image_name)
|
|
if self.skip:
|
|
self.logger.info('looking for image at path: %s' % image_path)
|
|
if os.path.exists('%s.%s' % (image_path, image_extension)):
|
|
self.logger.info('Image file exists for image name: %s' %
|
|
image_name)
|
|
self.logger.info('Skipping image build')
|
|
continue
|
|
elements = image.get('elements', [])
|
|
options = image.get('options', [])
|
|
packages = image.get('packages', [])
|
|
environment = image.get('environment', {})
|
|
|
|
extra_options = {
|
|
'skip_base': skip_base,
|
|
'docker_target': docker_target,
|
|
'environment': environment
|
|
}
|
|
|
|
builder = ImageBuilder.get_builder(builder)
|
|
builder.build_image(image_path, image_type, node_dist, arch,
|
|
elements, options, packages, extra_options)
|