#!/bin/bash

set -o xtrace

source /var/onap/functions

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

# clone_multicloud_repos() - Function that clones the Multi Cloud repositories
function clone_multicloud_repos {
    for repo in ${multicloud_repos[@]}; do
        clone_repo $repo $multicloud_src_folder${repo#*multicloud}
    done
}

# compile_multicloud_repos() - 
function compile_multicloud_repos {
    for repo in ${multicloud_repos[@]}; do
        compile_src $multicloud_src_folder${repo#*multicloud}
    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
}
