#!/bin/bash

set -o xtrace

source /var/onap/functions

mr_src_folder=$git_src_folder/dcae/message-router

# clone_mr_repos() - Function that clones the Message Router repositories
function clone_mr_repos {
    clone_repo dcae/demo/startup/message-router $mr_src_folder
}

# get_mr_images() - Function that retrieves the Message Router Docker images
function get_mr_images {
    pull_docker_image attos/dmaap
    pull_docker_image wurstmeister/zookeeper
}

# install_message_router() - Downloads and configure message router source code
function install_message_router {
    install_docker_compose

    pushd $mr_src_folder
    bash deploy.sh
    popd
}

# init_mr() - Function that initialize Message Router services
function init_mr {
    if [[ "$clone_repo" == "True" ]]; then
        clone_mr_repos
    fi
    get_mr_images
    install_message_router
}
