#!/bin/bash
#
# lib/stack
#
# These functions are code snippets pulled out of stack.sh for easier
# re-use by Grenade.  They can assume the same environment is available
# as in the lower part of stack.sh, namely a valid stackrc has been sourced
# as well as all of the lib/* files for the services have been sourced.
#
# For clarity, all functions declared here that came from ``stack.sh``
# shall be named with the prefix ``stack_``.


# Generic service install handles venv creation if confgured for service
# stack_install_service service
function stack_install_service {
    local service=$1
    if type install_${service} >/dev/null 2>&1; then
        if [[ -n ${PROJECT_VENV[$service]:-} ]]; then
            rm -rf ${PROJECT_VENV[$service]}
            source $TOP_DIR/tools/build_venv.sh ${PROJECT_VENV[$service]}
            export PIP_VIRTUAL_ENV=${PROJECT_VENV[$service]:-}
        fi
        install_${service}
        if [[ -n ${PROJECT_VENV[$service]:-} ]]; then
            unset PIP_VIRTUAL_ENV
        fi
    fi
}
