#!/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 $ccsdk_src_folder/distribution
    for image in ubuntu opendaylight odlsli dgbuilder-docker; do
        build_docker_image $ccsdk_src_folder/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
}
