#!/bin/bash

set -o xtrace

source /var/onap/functions

multicloud_src_folder=$git_src_folder/multicloud
multicloud_repos=("azure" "framework" "openstack" "openstack/vmware" "openstack/windriver")

# clone_multicloud_repos() - Function that clones the Multi Cloud repositories
function clone_multicloud_repos {
    clone_repo multicloud $multicloud_src_folder

    for dirc in ${multicloud_repos[@]}; do
        clone_repo multicloud/$dirc $multicloud_src_folder/$dirc
    done
}

# compile_multicloud_repos() - 
function compile_multicloud_repos {
    compile_src multicloud $multicloud_src_folder

    for dirc in ${multicloud_repos[@]}; do
        compile_src $multicloud_src_folder/$dirc
    done
}

# get_multicloud_images() -
function get_multicloud_images {
    echo "pass"
}

# install_multicloud() - 
function install_multicloud {
    echo "pass"
}

# init_multicloud() - Function that initialize Multi Cloud services
function init_multicloud {
    if [[ "$clone_repo" == "True" ]]; then
        clone_multicloud_repos
        if [[ "$compile_repo" == "True" ]]; then
            compile_multicloud_repos
        fi
    fi
    if [[ "$skip_get_images" == "False" ]]; then
        get_multicloud_images
        if [[ "$skip_install" == "False" ]]; then
            install_multicloud
        fi
    fi
}
