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

    if [[ `env | grep -i "proxy"` ]]; then
        add_no_proxy_value $internal_vip_address
    fi

    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
}
