#!/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
}

# 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
    install_multicloud
}
