#!/bin/bash
#
#
# ``plugin.sh`` calls the following methods in the sourced driver:
#
# - nb_db_driver_install_server
# - nb_db_driver_install_client
# - nb_db_driver_start_server
# - nb_db_driver_stop_server
# - nb_db_driver_clean
# - nb_db_driver_configure

HOSTNAME=`hostname -f`

if is_ubuntu ; then
    UBUNTU_RELEASE_BASE_NUM=`lsb_release -r | awk '{print $2}' | cut -d '.' -f 1`
fi

ZOOKEEPER_IP=${REMOTE_DB_IP:-${HOST_IP}}
ZOOKEEPER_PORT=${REMOTE_DB_PORT:-2181}
ZOOKEEPER_DATA_DIR="/var/lib/zookeeper"
ZOOKEEPER_LOG_DIR="/var/log/zookeeper"
ZOOKEEPER_DIR="/etc/zookeeper"

function nb_db_driver_install_server {
    if is_service_enabled df-zookeeper-server ; then
        echo "Installing Zookeeper server"
        if is_ubuntu; then
            ZOOKEEPER_CONF_DIR="${ZOOKEEPER_DIR}/conf"
            ZOOKEEPER_CONF_FILE="${ZOOKEEPER_CONF_DIR}/zoo.cfg"
            ZOOKEEPER_CONF_SAMPLE_DIR="/etc/zookeeper/conf_example"
            sudo mkdir -p $ZOOKEEPER_DATA_DIR
            sudo mkdir -p $ZOOKEEPER_LOG_DIR
            sudo mkdir -p $ZOOKEEPER_CONF_DIR
            install_package zookeeperd
            stop_service zookeeper
            if [ $UBUNTU_RELEASE_BASE_NUM -ge 16 ] ; then
                sudo cp $DEST/dragonflow/devstack/zookeeper.service.ubuntu /etc/systemd/system/zookeeper.service
                sudo systemctl daemon-reload
            fi
            if [ -d $ZOOKEEPER_CONF_SAMPLE_DIR ] ; then
                sudo cp $ZOOKEEPER_CONF_SAMPLE_DIR/* $ZOOKEEPER_CONF_DIR/ -rf
            fi
        elif is_fedora; then
            ZOOKEEPER_CONF_DIR="${ZOOKEEPER_DIR}"
            ZOOKEEPER_CONF_FILE="${ZOOKEEPER_CONF_DIR}/zoo.cfg"
            ZOOKEEPER_CONF_SAMPLE_FILE="${ZOOKEEPER_CONF_DIR}/zoo_sample.cfg"
            sudo mkdir -p $ZOOKEEPER_DATA_DIR
            sudo mkdir -p $ZOOKEEPER_LOG_DIR
            sudo mkdir -p $ZOOKEEPER_CONF_DIR
            install_package zookeeper jline netty jetty
            sudo cp $DEST/dragonflow/devstack/zookeeper.service.fedora /etc/systemd/system/zookeeper.service
            sudo systemctl daemon-reload
            if [ -f $ZOOKEEPER_CONF_SAMPLE_FILE ] ; then
                sudo cp $ZOOKEEPER_CONF_SAMPLE_FILE $ZOOKEEPER_CONF_FILE
            fi
        else
            die $LINENO "Other distributions are not supported"
        fi

        echo "Configuring Zookeeper"
        if [ -f $ZOOKEEPER_CONF_FILE ] ; then
            sudo sed -i "/^dataDir=/c dataDir=${ZOOKEEPER_DATA_DIR}" $ZOOKEEPER_CONF_FILE
            sudo sed -i "/^dataLogDir=/c dataLogDir=${ZOOKEEPER_LOG_DIR}" $ZOOKEEPER_CONF_FILE
            local result=`grep "server.1" $ZOOKEEPER_CONF_FILE`
            if [ $result -eq 0 ]; then
                sudo sed -i "/^[#server.1=|server.1=]/c server.1=${HOSTNAME}:2888:3888" $ZOOKEEPER_CONF_FILE
            else
                echo "server.1=${HOSTNAME}:2888:3888" | sudo tee -a $ZOOKEEPER_CONF_FILE
            fi
        fi
        echo "1" | sudo tee $ZOOKEEPER_CONF_DIR/myid
    fi
}

function nb_db_driver_clean {
    if is_ubuntu; then
        uninstall_package -y zookeeperd
    elif is_fedora; then
        uninstall_package -y zookeeper
    fi
    if [ -f "/etc/systemd/system/zookeeper.service" ] ; then
        sudo rm /etc/systemd/system/zookeeper.service
        sudo systemctl daemon-reload
    fi
}

function nb_db_driver_install_client {
    echo 'Zookeeper client sdk is in the requirements file.'
}

function nb_db_driver_start_server {
    if is_service_enabled df-zookeeper-server ; then
        start_service zookeeper
    fi
}

function nb_db_driver_stop_server {
    if is_service_enabled df-zookeeper-server ; then
        stop_service zookeeper
    fi
}

function nb_db_driver_configure {
    :
}
