#!/bin/bash
#
# lib/gantt
# Install and start **Gantt** scheduler service

# Dependencies:
#
# - functions
# - DEST, DATA_DIR, STACK_USER must be defined

# stack.sh
# ---------
# - install_gantt
# - configure_gantt
# - init_gantt
# - start_gantt
# - stop_gantt
# - cleanup_gantt

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

# Defaults
# --------

# set up default directories
GANTT_DIR=$DEST/gantt
GANTT_STATE_PATH=${GANTT_STATE_PATH:=$DATA_DIR/gantt}
GANTT_REPO=${GANTT_REPO:-${GIT_BASE}/openstack/gantt.git}
GANTT_BRANCH=${GANTT_BRANCH:-master}

GANTTCLIENT_DIR=$DEST/python-ganttclient
GANTTCLIENT_REPO=${GANTT_REPO:-${GIT_BASE}/openstack/python-ganttclient.git}
GANTTCLIENT_BRANCH=${GANTT_BRANCH:-master}

# eventually we will have a separate gantt config
# file but for compatibility reasone stick with
# nova.conf for now
GANTT_CONF_DIR=${GANTT_CONF_DIR:-/etc/nova}
GANTT_CONF=$GANTT_CONF_DIR/nova.conf

# Support entry points installation of console scripts
GANTT_BIN_DIR=$(get_python_exec_prefix)


# Functions
# ---------

# cleanup_gantt() - Remove residual data files, anything left over from previous
# runs that a clean run would need to clean up
function cleanup_gantt {
    echo "Cleanup Gantt"
}

# configure_gantt() - Set config files, create data dirs, etc
function configure_gantt {
    echo "Configure Gantt"
}

# init_gantt() - Initialize database and volume group
function init_gantt {
    echo "Initialize Gantt"
}

# install_gantt() - Collect source and prepare
function install_gantt {
    git_clone $GANTT_REPO $GANTT_DIR $GANTT_BRANCH
    setup_develop $GANTT_DIR
}

# install_ganttclient() - Collect source and prepare
function install_ganttclient {
    echo "Install Gantt Client"
#    git_clone $GANTTCLIENT_REPO $GANTTCLIENT_DIR $GANTTCLIENT_BRANCH
#    setup_develop $GANTTCLIENT_DIR
}

# start_gantt() - Start running processes, including screen
function start_gantt {
    if is_service_enabled gantt; then
        run_process gantt "$GANTT_BIN_DIR/gantt-scheduler --config-file $GANTT_CONF"
    fi
}

# stop_gantt() - Stop running processes
function stop_gantt {
    echo "Stop Gantt"
    stop_process gantt
}

# Restore xtrace
$XTRACE

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