blob: 1b3fb8b100999e6f034f2969666b2a1ba0349ef1 [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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
from liminal.build.image_builder import ImageBuilder
from liminal.core.config.config import ConfigUtil
from liminal.core.util import files_util, class_util
def build_liminal_apps(path):
"""
Build images for liminal apps in path.
"""
config_util = ConfigUtil(path)
configs = config_util.safe_load(is_render_variables=True, soft_merge=True)
for liminal_config in configs:
base_path = os.path.dirname(files_util.resolve_pipeline_source_file(liminal_config['name']))
if 'images' in liminal_config:
for image in liminal_config['images']:
image_name = image['image']
if 'source' in image:
image_type = image['type']
builder_class = __get_image_builder_class(image_type)
if builder_class:
__build_image(base_path, image, builder_class)
else:
raise ValueError(f'No such image type: {image_type}')
else:
logging.warning(f'No source configured for image {image_name}.')
def __build_image(base_path, builder_config, builder):
builder_instance = builder(
config=builder_config,
base_path=base_path,
relative_source_path=builder_config['source'],
tag=builder_config['image'])
builder_instance.build()
def __get_image_builder_class(task_type):
return image_builder_types.get(task_type, None)
logging.info(f'Loading image builder implementations..')
# TODO: add configuration for user image builders package
image_builders_package = 'liminal.build.image'
# user_image_builders_package = 'TODO: user_image_builders_package'
image_builder_types = class_util.find_subclasses_in_packages(
[image_builders_package],
ImageBuilder)
logging.info(f'Finished loading image builder implementations: {image_builder_types}')
logging.info(f'Loading service image builder implementations..')