# lib/template
# Functions to control the configuration and operation of the XXXX service
# <do not include this template file in ``stack.sh``!>

# Dependencies:
#
# - ``functions`` file
# - ``SERVICE_{TENANT_NAME|PASSWORD}`` must be defined
# - <list other global vars that are assumed to be defined>

# ``stack.sh`` calls the entry points in this order:
#
# - is_XXXX_enabled
# - install_XXXX
# - configure_XXXX
# - init_XXXX
# - start_XXXX
# - stop_XXXX
# - cleanup_XXXX

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


# Defaults
# --------

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

# Set up default directories
XXXX_DIR=$DEST/XXXX
XXX_CONF_DIR=/etc/XXXX


# Entry Points
# ------------

# Test if any XXXX services are enabled
# is_XXXX_enabled
function is_XXXX_enabled {
    [[ ,${ENABLED_SERVICES} =~ ,"XX-" ]] && return 0
    return 1
}

# cleanup_XXXX() - Remove residual data files, anything left over from previous
# runs that a clean run would need to clean up
function cleanup_XXXX {
    # kill instances (nova)
    # delete image files (glance)
    # This function intentionally left blank
    :
}

# configure_XXXX() - Set config files, create data dirs, etc
function configure_XXXX {
    # sudo python setup.py deploy
    # iniset $XXXX_CONF ...
    # This function intentionally left blank
    :
}

# init_XXXX() - Initialize databases, etc.
function init_XXXX {
    # clean up from previous (possibly aborted) runs
    # create required data files
    :
}

# install_XXXX() - Collect source and prepare
function install_XXXX {
    # git clone xxx
    :
}

# start_XXXX() - Start running processes, including screen
function start_XXXX {
    # screen_it XXXX "cd $XXXX_DIR && $XXXX_DIR/bin/XXXX-bin"
    :
}

# stop_XXXX() - Stop running processes (non-screen)
function stop_XXXX {
    # FIXME(dtroyer): stop only our screen screen window?
    :
}

# Restore xtrace
$XTRACE

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