#!/bin/bash

source /var/onap/functions

# _build_ccsdk_images() - Build CCSDK Docker images from source code
function _build_ccsdk_images {
    install_package unzip
    compile_src ${src_folders[ccsdk]}/distribution
    for image in ubuntu opendaylight odlsli dgbuilder-docker; do
        build_docker_image ${src_folders[ccsdk]}/distribution/$image docker
    done
}

# get_ccsdk_images() - Get CCSDK Docker images
function get_ccsdk_images {
    if [[ "$build_image" == "True" ]]; then
        _build_ccsdk_images
    else
        for image in ubuntu odl dgbuilder; do
            pull_onap_image ccsdk-$image-image
        done
    fi
}

# init_ccsdk() - Function that initialize Multi Cloud services
function init_ccsdk {
    if [[ "$clone_repo" == "True" ]]; then
        clone_repos "ccsdk"
        if [[ "$compile_repo" == "True" ]]; then
            compile_repos "ccsdk"
        fi
    fi
    if [[ "$skip_get_images" == "False" ]]; then
        get_ccsdk_images
    fi
}
