aleger's picture
initial commit
1227edc
#!/usr/bin/env bash
set -Eeuo pipefail
# check to see if this file is being run or sourced from another script
_is_sourced() {
# https://unix.stackexchange.com/a/215279
[ "${#FUNCNAME[@]}" -ge 2 ] &&
[ "${FUNCNAME[0]}" = '_is_sourced' ] &&
[ "${FUNCNAME[1]}" = 'source' ]
}
_main() {
# For backwards compatibility with the yatai<1.0.0, adapting the old "yatai" command to the new "start" command.
if [ "${#}" -gt 0 ] && [ "${1}" = 'python' ] && [ "${2}" = '-m' ] && { [ "${3}" = 'bentoml._internal.server.cli.runner' ] || [ "${3}" = "bentoml._internal.server.cli.api_server" ]; }; then # SC2235, use { } to avoid subshell overhead
if [ "${3}" = 'bentoml._internal.server.cli.runner' ]; then
set -- bentoml start-runner-server "${@:4}"
elif [ "${3}" = 'bentoml._internal.server.cli.api_server' ]; then
set -- bentoml start-http-server "${@:4}"
fi
# If no arg or first arg looks like a flag.
elif [[ "$#" -eq 0 ]] || [[ "${1:0:1}" =~ '-' ]]; then
# This is provided for backwards compatibility with places where user may have
# discover this easter egg and use it in their scripts to run the container.
if [[ -v BENTOML_SERVE_COMPONENT ]]; then
echo "\$BENTOML_SERVE_COMPONENT is set! Calling 'bentoml start-*' instead"
if [ "${BENTOML_SERVE_COMPONENT}" = 'http_server' ]; then
set -- bentoml start-http-server "$@" "$BENTO_PATH"
elif [ "${BENTOML_SERVE_COMPONENT}" = 'grpc_server' ]; then
set -- bentoml start-grpc-server "$@" "$BENTO_PATH"
elif [ "${BENTOML_SERVE_COMPONENT}" = 'runner' ]; then
set -- bentoml start-runner-server "$@" "$BENTO_PATH"
fi
else
set -- bentoml serve "$@" "$BENTO_PATH"
fi
fi
# Overide the BENTOML_PORT if PORT env var is present. Used for Heroku and Yatai.
if [[ -v PORT ]]; then
echo "\$PORT is set! Overiding \$BENTOML_PORT with \$PORT ($PORT)"
export BENTOML_PORT=$PORT
fi
# Handle serve and start commands that is passed to the container.
# Assuming that serve and start commands are the first arguments
# Note that this is the recommended way going forward to run all bentoml containers.
if [ "${#}" -gt 0 ] && { [ "${1}" = 'serve' ] || [ "${1}" = 'serve-http' ] || [ "${1}" = 'serve-grpc' ] || [ "${1}" = 'start-http-server' ] || [ "${1}" = 'start-grpc-server' ] || [ "${1}" = 'start-runner-server' ]; }; then
exec bentoml "$@" "$BENTO_PATH"
else
# otherwise default to run whatever the command is
# This should allow running bash, sh, python, etc
exec "$@"
fi
}
if ! _is_sourced; then
_main "$@"
fi