#!/bin/bash

source /var/onap/functions

kolla_config=/etc/kolla
kolla_build=$kolla_config/kolla-build.conf
kolla_passwords=$kolla_config/passwords.yml
kolla_globals=$kolla_config/globals.yml
kolla_inventory=/var/onap/files/all-in-one

# install_dependencies() - Function that installs Kolla-Ansible requirements
function install_dependencies {
    install_docker

    mkdir -p /etc/systemd/system/docker.service.d
    tee /etc/systemd/system/docker.service.d/kolla.conf <<-'EOF'
[Service]
MountFlags=shared
EOF
    systemctl daemon-reload
    systemctl restart docker

    install_python_package ansible docker kolla-ansible python-openstackclient
}

# configure_deploy() - Function that modifies configuration files
function configure_deploy {
    local network_id=$1
    local enable_opendaylight=${2-False}
    local openstack_services="main = ceilometer,cinder,glance,heat,horizon,isci,keystone,neutron,nova-,swift"
    nic=$(ip route get $network_id | awk '{ print $4; exit }')
    ip_address=$(ip route get $network_id | awk '{ print $6; exit }')
    internal_vip_address=$(get_next_ip $ip_address)

    mkdir -p $kolla_config
    cp /var/onap/files/globals.yml $kolla_globals
    cp /var/onap/files/passwords.yml $kolla_passwords
    cp /var/onap/files/kolla-build.conf $kolla_build
    kolla-genpwd
    echo "network_interface: \"$nic\"" >> $kolla_globals
    echo "kolla_internal_vip_address: \"$internal_vip_address\"" >> $kolla_globals
    echo "api_interface: \"{{ network_interface }}\"" >> $kolla_globals
    if [[ $enable_opendaylight == True ]]; then
        echo "enable_opendaylight: \"yes\"" >> $kolla_globals
        openstack_services+=",opendaylight"
    fi
    echo $openstack_services >> $kolla_build

    echo "$ip_address $(hostname)" >> /etc/hosts
}

# get_openstack_images() - Function that retrieves or builds docker images
function get_openstack_images {
    if [[ "$build_image" == "True" ]]; then
        install_python_package kolla
        kolla-build --config-file $kolla_build
    else
        kolla-ansible pull -i $kolla_inventory
    fi
}

# deploy_openstack() - Function that provisions an OpenStack deployment
function deploy_openstack {
    install_dependencies
    configure_deploy ${1:-"192.168.53.0"} "True"

    get_openstack_images
    kolla-ansible deploy -i $kolla_inventory
    kolla-ansible post-deploy
    echo "source /etc/kolla/admin-openrc.sh" >> ${HOME}/.bashrc
}
