#!/bin/bash
#
# lib/dlm
#
# Functions to control the installation and configuration of software
# that provides a dlm (and possibly other functions). The default is
# **zookeeper**, and is going to be the only backend supported in the
# devstack tree.

# Dependencies:
#
# - ``functions`` file

# ``stack.sh`` calls the entry points in this order:
#
# - is_dlm_enabled
# - install_dlm
# - configure_dlm
# - cleanup_dlm

# Save trace setting
_XTRACE_DLM=$(set +o | grep xtrace)
set +o xtrace


# Defaults
# --------

# <define global variables here that belong to this project>

# Set up default directories
ZOOKEEPER_DATA_DIR=$DEST/data/zookeeper
ZOOKEEPER_CONF_DIR=/etc/zookeeper


# Entry Points
# ------------
#
# NOTE(sdague): it is expected that when someone wants to implement
# another one of these out of tree, they'll implement the following
# functions:
#
# - dlm_backend
# - install_dlm
# - configure_dlm
# - cleanup_dlm

# This should be declared in the settings file of any plugin or
# service that needs to have a dlm in their environment.
function use_dlm {
    enable_service $(dlm_backend)
}

# A function to return the name of the backend in question, some users
# are going to need to know this.
function dlm_backend {
    echo "zookeeper"
}

# Test if a dlm is enabled (defaults to a zookeeper specific check)
function is_dlm_enabled {
    [[ ,${ENABLED_SERVICES}, =~ ,"$(dlm_backend)", ]] && return 0
    return 1
}

# cleanup_dlm() - Remove residual data files, anything left over from previous
# runs that a clean run would need to clean up
function cleanup_dlm {
    # NOTE(sdague): we don't check for is_enabled here because we
    # should just delete this regardless. Some times users updated
    # their service list before they run cleanup.
    sudo rm -rf $ZOOKEEPER_DATA_DIR
}

# configure_dlm() - Set config files, create data dirs, etc
function configure_dlm {
    if is_dlm_enabled; then
        sudo cp $FILES/zookeeper/* $ZOOKEEPER_CONF_DIR
        sudo sed -i -e 's|.*dataDir.*|dataDir='$ZOOKEEPER_DATA_DIR'|' $ZOOKEEPER_CONF_DIR/zoo.cfg
        # clean up from previous (possibly aborted) runs
        # create required data files
        sudo rm -rf $ZOOKEEPER_DATA_DIR
        sudo mkdir -p $ZOOKEEPER_DATA_DIR
        # restart after configuration, there is no reason to make this
        # another step, because having data files that don't match the
        # zookeeper running is just going to cause tears.
        restart_service zookeeper
    fi
}

# install_dlm() - Collect source and prepare
function install_dlm {
    if is_dlm_enabled; then
        if is_ubuntu; then
            install_package zookeeperd
        elif is_fedora; then
            install_package zookeeper
        else
            die $LINENO "Don't know how to install zookeeper on this platform"
        fi
    fi
}

# Restore xtrace
$_XTRACE_DLM

# Tell emacs to use shell-script-mode
## Local variables:
## mode: shell-script
## End: