# Install and start the **Tuskar** service
#
# To enable, add the following to your localrc
#
# enable_service tuskar
# enable_service tuskar-api


if is_service_enabled tuskar; then
    if [[ "$1" == "source" ]]; then
        # Initial source, do nothing as functions sourced
        # are below rather than in lib/tuskar
        echo_summary "source extras tuskar"
    elif [[ "$1" == "stack" && "$2" == "install" ]]; then
        echo_summary "Installing Tuskar"
        install_tuskarclient
        install_tuskar
    elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
        echo_summary "Configuring Tuskar"
        configure_tuskar
        configure_tuskarclient

        if is_service_enabled key; then
            create_tuskar_accounts
        fi

    elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
        echo_summary "Initializing Tuskar"
        init_tuskar
        start_tuskar
    fi

    if [[ "$1" == "unstack" ]]; then
        stop_tuskar
    fi
fi

# library code (equivalent to lib/tuskar)
# ---------
# - install_tuskarclient
# - install_tuskar
# - configure_tuskarclient
# - configure_tuskar
# - init_tuskar
# - start_tuskar
# - stop_tuskar
# - cleanup_tuskar

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


# Defaults
# --------

# tuskar repos
TUSKAR_REPO=${TUSKAR_REPO:-${GIT_BASE}/openstack/tuskar.git}
TUSKAR_BRANCH=${TUSKAR_BRANCH:-master}

TUSKARCLIENT_REPO=${TUSKARCLIENT_REPO:-${GIT_BASE}/openstack/python-tuskarclient.git}
TUSKARCLIENT_BRANCH=${TUSKARCLIENT_BRANCH:-master}

# set up default directories
TUSKAR_DIR=$DEST/tuskar
TUSKARCLIENT_DIR=$DEST/python-tuskarclient
TUSKAR_AUTH_CACHE_DIR=${TUSKAR_AUTH_CACHE_DIR:-/var/cache/tuskar}
TUSKAR_STANDALONE=$(trueorfalse False TUSKAR_STANDALONE)
TUSKAR_CONF_DIR=/etc/tuskar
TUSKAR_CONF=$TUSKAR_CONF_DIR/tuskar.conf
TUSKAR_API_HOST=${TUSKAR_API_HOST:-$HOST_IP}
TUSKAR_API_PORT=${TUSKAR_API_PORT:-8585}

# Tell Tempest this project is present
TEMPEST_SERVICES+=,tuskar

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

# Test if any Tuskar services are enabled
# is_tuskar_enabled
function is_tuskar_enabled {
    [[ ,${ENABLED_SERVICES} =~ ,"tuskar-" ]] && return 0
    return 1
}

# cleanup_tuskar() - Remove residual data files, anything left over from previous
# runs that a clean run would need to clean up
function cleanup_tuskar {
    sudo rm -rf $TUSKAR_AUTH_CACHE_DIR
}

# configure_tuskar() - Set config files, create data dirs, etc
function configure_tuskar {
    setup_develop $TUSKAR_DIR

    if [[ ! -d $TUSKAR_CONF_DIR ]]; then
        sudo mkdir -p $TUSKAR_CONF_DIR
    fi
    sudo chown $STACK_USER $TUSKAR_CONF_DIR
    # remove old config files
    rm -f $TUSKAR_CONF_DIR/tuskar-*.conf

    TUSKAR_POLICY_FILE=$TUSKAR_CONF_DIR/policy.json

    cp $TUSKAR_DIR/etc/tuskar/policy.json $TUSKAR_POLICY_FILE
    cp $TUSKAR_DIR/etc/tuskar/tuskar.conf.sample $TUSKAR_CONF

    # common options
    iniset $TUSKAR_CONF database connection `database_connection_url tuskar`

    # logging
    iniset $TUSKAR_CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL
    iniset $TUSKAR_CONF DEFAULT use_syslog $SYSLOG
    if [ "$LOG_COLOR" == "True" ] && [ "$SYSLOG" == "False" ]; then
        # Add color to logging output
        setup_colorized_logging $TUSKAR_CONF DEFAULT tenant user
    fi

    configure_auth_token_middleware $TUSKAR_CONF tuskar $TUSKAR_AUTH_CACHE_DIR

    if is_ssl_enabled_service "key"; then
        iniset $TUSKAR_CONF clients_keystone ca_file $SSL_BUNDLE_FILE
    fi

    iniset $TUSKAR_CONF tuskar_api bind_port $TUSKAR_API_PORT

}

# init_tuskar() - Initialize database
function init_tuskar {

    # (re)create tuskar database
    recreate_database tuskar

    tuskar-dbsync --config-file $TUSKAR_CONF
    create_tuskar_cache_dir
}

# create_tuskar_cache_dir() - Part of the init_tuskar() process
function create_tuskar_cache_dir {
    # Create cache dirs
    sudo mkdir -p $TUSKAR_AUTH_CACHE_DIR
    sudo chown $STACK_USER $TUSKAR_AUTH_CACHE_DIR
}

# install_tuskarclient() - Collect source and prepare
function install_tuskarclient {
    git_clone $TUSKARCLIENT_REPO $TUSKARCLIENT_DIR $TUSKARCLIENT_BRANCH
    setup_develop $TUSKARCLIENT_DIR
}

# configure_tuskarclient() - Set config files, create data dirs, etc
function configure_tuskarclient {
    setup_develop $TUSKARCLIENT_DIR
}

# install_tuskar() - Collect source and prepare
function install_tuskar {
    git_clone $TUSKAR_REPO $TUSKAR_DIR $TUSKAR_BRANCH
}

# start_tuskar() - Start running processes, including screen
function start_tuskar {
    run_process tuskar-api "tuskar-api --config-file=$TUSKAR_CONF"
}

# stop_tuskar() - Stop running processes
function stop_tuskar {
    # Kill the screen windows
    local serv
    for serv in tuskar-api; do
        stop_process $serv
    done
}

# create_tuskar_accounts() - Set up common required tuskar accounts
function create_tuskar_accounts {
    # migrated from files/keystone_data.sh
    local service_tenant=$(openstack project list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
    local admin_role=$(openstack role list | awk "/ admin / { print \$2 }")

    local tuskar_user=$(get_or_create_user "tuskar" \
        "$SERVICE_PASSWORD" $service_tenant)
    get_or_add_user_role $admin_role $tuskar_user $service_tenant

    if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then

        local tuskar_service=$(get_or_create_service "tuskar" \
                "management" "Tuskar Management Service")
        get_or_create_endpoint $tuskar_service \
            "$REGION_NAME" \
            "$SERVICE_PROTOCOL://$TUSKAR_API_HOST:$TUSKAR_API_PORT" \
            "$SERVICE_PROTOCOL://$TUSKAR_API_HOST:$TUSKAR_API_PORT" \
            "$SERVICE_PROTOCOL://$TUSKAR_API_HOST:$TUSKAR_API_PORT"
    fi
}

# Restore xtrace
$XTRACE

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