#!/bin/bash
# ============LICENSE_START=======================================================
#  Copyright (C) 2019 The Nordix Foundation. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================

set -o errexit
set -o nounset
set -o pipefail

INSTALLER_ROOT_DIR="$(dirname "$(realpath "${BASH_SOURCE[0]}")")"
export ANSIBLE_ROLES_PATH="$HOME/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:${ENGINE_PATH}/engine/playbooks/roles:${ENGINE_CACHE}/repos/bifrost/playbooks/roles"
export ANSIBLE_LIBRARY="$HOME/.ansible/plugins/modules:/usr/share/ansible/plugins/modules:${ENGINE_CACHE}/repos/bifrost/playbooks/library"

# configure target hosts
echo "-------------------------------------------------------------------------"
echo "Info: Configure target hosts"
echo "-------------------------------------------------------------------------"
cd "${ENGINE_PATH}"
ansible-playbook "${ENGINE_ANSIBLE_PARAMS[@]}" \
    -i "${ENGINE_PATH}/engine/inventory/inventory.ini" \
    "${INSTALLER_ROOT_DIR}/playbooks/configure-targethosts.yml"

# configure kolla installer
echo "-------------------------------------------------------------------------"
echo "Info: Configure kolla installer"
echo "-------------------------------------------------------------------------"
cd "${ENGINE_PATH}"
ansible-playbook "${ENGINE_ANSIBLE_PARAMS[@]}" \
    -i "${ENGINE_PATH}/engine/inventory/inventory.ini" \
    "${INSTALLER_ROOT_DIR}/playbooks/configure-installer.yml"

# TODO: we need to run scenario pre-deployment tasks here in order to configure
# bootstrap scenario
echo "-------------------------------------------------------------------------"
echo "Info: Execute scenario pre deployment tasks"
echo "-------------------------------------------------------------------------"
cd "${ENGINE_PATH}"
ansible-playbook "${ENGINE_ANSIBLE_PARAMS[@]}" \
    -i "${ENGINE_PATH}/engine/inventory/inventory.ini" \
    "${INSTALLER_ROOT_DIR}/playbooks/pre-deployment.yml"

# kolla-ansible: bootstrap servers
echo "-------------------------------------------------------------------------"
echo "Info: Kolla-ansible bootstrap servers"
echo "-------------------------------------------------------------------------"
cd "${ENGINE_CACHE}/repos/kolla-ansible/tools"
./kolla-ansible \
    -i "${ENGINE_PATH}/engine/inventory/inventory.ini" \
    --configdir "${ENGINE_CACHE}/config" \
    --passwords "${ENGINE_CACHE}/config/passwords.yml" \
    -e "@${ENGINE_CACHE}/config/kolla-ansible-extra-vars.yml" \
    bootstrap-servers

# kolla-ansible: prechecks
echo "-------------------------------------------------------------------------"
echo "Info: Kolla-ansible prechecks"
echo "-------------------------------------------------------------------------"
cd "${ENGINE_CACHE}/repos/kolla-ansible/tools"
./kolla-ansible \
    -i "${ENGINE_PATH}/engine/inventory/inventory.ini" \
    --configdir "${ENGINE_CACHE}/config" \
    --passwords "${ENGINE_CACHE}/config/passwords.yml" \
    -e "@${ENGINE_CACHE}/config/kolla-ansible-extra-vars.yml" \
    prechecks

# kolla-ansible: deploy
echo "-------------------------------------------------------------------------"
echo "Info: Kolla-ansible deploy"
echo "-------------------------------------------------------------------------"
cd "${ENGINE_CACHE}/repos/kolla-ansible/tools"
./kolla-ansible \
    -i "${ENGINE_PATH}/engine/inventory/inventory.ini" \
    --configdir "${ENGINE_CACHE}/config" \
    --passwords "${ENGINE_CACHE}/config/passwords.yml" \
    -e "@${ENGINE_CACHE}/config/kolla-ansible-extra-vars.yml" \
    deploy

# kolla-ansible: post-deploy
echo "-------------------------------------------------------------------------"
echo "Info: Kolla-ansible post-deploy"
echo "-------------------------------------------------------------------------"
cd "${ENGINE_CACHE}/repos/kolla-ansible/tools"
./kolla-ansible \
    -i "${ENGINE_PATH}/engine/inventory/inventory.ini" \
    --configdir "${ENGINE_CACHE}/config" \
    --passwords "${ENGINE_CACHE}/config/passwords.yml" \
    -e "@${ENGINE_CACHE}/config/kolla-ansible-extra-vars.yml" \
    post-deploy

# NOTE: shellcheck SC1090 is disabled since openrc file is put in place during runtime
# shellcheck disable=SC1090
# source admin-openrc.sh for running post-deployment tasks
source "${ENGINE_CACHE}/config/admin-openrc.sh"

# run post-deployment tasks
echo "-------------------------------------------------------------------------"
echo "Info: Execute scenario and common post deployment tasks"
echo "-------------------------------------------------------------------------"
cd "${ENGINE_PATH}"
ansible-playbook "${ENGINE_ANSIBLE_PARAMS[@]}" \
    -i "${ENGINE_PATH}/engine/inventory/inventory.ini" \
    "${INSTALLER_ROOT_DIR}/playbooks/post-deployment.yml"

# vim: set ts=2 sw=2 expandtab:
