2016-03-01 13:26:35 -08:00
|
|
|
#!/usr/bin/env bash
|
2019-01-07 01:04:17 -05:00
|
|
|
set -eo pipefail
|
|
|
|
|
[[ $DOKKU_TRACE ]] && set -x
|
2016-03-01 13:26:35 -08:00
|
|
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
|
2018-03-03 22:53:24 -05:00
|
|
|
source "$PLUGIN_AVAILABLE_PATH/config/functions"
|
2016-03-01 13:26:35 -08:00
|
|
|
|
|
|
|
|
enter_default_cmd() {
|
2016-03-08 15:30:34 -05:00
|
|
|
declare desc="enters running app container of specified proc type"
|
2016-03-01 13:26:35 -08:00
|
|
|
local cmd="enter"
|
2019-01-07 01:04:17 -05:00
|
|
|
local APP="$2"
|
|
|
|
|
local CONTAINER_TYPE="$3"
|
|
|
|
|
local IMAGE_TAG=$(get_running_image_tag "$APP")
|
|
|
|
|
local IMAGE=$(get_deploying_app_image_name "$APP" "$IMAGE_TAG")
|
2016-03-01 13:26:35 -08:00
|
|
|
verify_app_name "$APP"
|
2016-05-11 16:40:10 -07:00
|
|
|
local AVAILABLE_CONTAINER_TYPES=($(get_app_running_container_types "$APP"))
|
2016-03-01 13:26:35 -08:00
|
|
|
|
2016-05-11 16:40:10 -07:00
|
|
|
if [[ -z "$3" ]]; then
|
|
|
|
|
if [[ ${#AVAILABLE_CONTAINER_TYPES[@]} -gt 1 ]]; then
|
|
|
|
|
dokku_log_warn "No container type specified."
|
2017-03-26 05:00:43 -06:00
|
|
|
dokku_log_fail "Available types for app ($APP): ${AVAILABLE_CONTAINER_TYPES[*]}"
|
2016-05-11 16:40:10 -07:00
|
|
|
else
|
|
|
|
|
CONTAINER_TYPE="${AVAILABLE_CONTAINER_TYPES[0]}"
|
|
|
|
|
fi
|
|
|
|
|
fi
|
2016-03-01 13:26:35 -08:00
|
|
|
|
|
|
|
|
if [[ "$3" == "--container-id" ]]; then
|
2019-01-07 01:04:17 -05:00
|
|
|
local DOKKU_APP_CIDS=($(get_app_container_ids "$APP"))
|
2019-02-02 13:52:18 -05:00
|
|
|
if [[ -z "$4" ]]; then
|
2016-05-11 16:40:10 -07:00
|
|
|
dokku_log_warn "No container id specified."
|
2017-03-26 05:00:43 -06:00
|
|
|
dokku_log_fail "Available ids for app ($APP): ${DOKKU_APP_CIDS[*]}"
|
2016-05-11 16:40:10 -07:00
|
|
|
fi
|
|
|
|
|
if ! (printf -- '%s\n' "${DOKKU_APP_CIDS[@]}" | grep -q -e "^$4"); then
|
|
|
|
|
dokku_log_warn "Invalid container id for app"
|
2017-03-26 05:00:43 -06:00
|
|
|
dokku_log_fail "Available ids for app ($APP): ${DOKKU_APP_CIDS[*]}"
|
2016-05-11 16:40:10 -07:00
|
|
|
fi
|
2016-03-01 13:26:35 -08:00
|
|
|
local ID=$(printf -- '%s\n' "${DOKKU_APP_CIDS[@]}" | grep -e "^$4")
|
|
|
|
|
shift 4
|
|
|
|
|
else
|
2019-01-07 01:04:17 -05:00
|
|
|
local DOKKU_APP_CIDS=($(get_app_container_ids "$APP" "$CONTAINER_TYPE"))
|
2016-03-01 13:26:35 -08:00
|
|
|
local ID=${DOKKU_APP_CIDS[0]}
|
2019-02-02 13:52:18 -05:00
|
|
|
if [[ -z $ID ]]; then
|
2016-05-11 16:40:10 -07:00
|
|
|
dokku_log_warn "No containers found for type '$CONTAINER_TYPE'"
|
2017-03-26 05:00:43 -06:00
|
|
|
dokku_log_fail "Available types for app ($APP): ${AVAILABLE_CONTAINER_TYPES[*]}"
|
2016-05-11 16:40:10 -07:00
|
|
|
fi
|
|
|
|
|
if [[ $3 ]]; then
|
|
|
|
|
shift 3
|
|
|
|
|
else
|
|
|
|
|
shift 2
|
|
|
|
|
fi
|
2016-03-01 13:26:35 -08:00
|
|
|
fi
|
|
|
|
|
|
2018-02-12 02:21:34 -05:00
|
|
|
(is_container_status "$ID" "Running") || dokku_log_fail "Container is not running"
|
2016-03-01 13:26:35 -08:00
|
|
|
|
2018-03-03 22:11:00 -05:00
|
|
|
local DOKKU_APP_SHELL="/bin/bash"
|
|
|
|
|
DOKKU_APP_SHELL="$(config_get --global DOKKU_APP_SHELL || echo "$DOKKU_APP_SHELL")"
|
|
|
|
|
DOKKU_APP_SHELL="$(config_get "$APP" DOKKU_APP_SHELL || echo "$DOKKU_APP_SHELL")"
|
|
|
|
|
[[ -z "$DOKKU_APP_SHELL" ]] && DOKKU_APP_SHELL="/bin/bash"
|
|
|
|
|
|
2016-03-01 13:26:35 -08:00
|
|
|
local EXEC_CMD=""
|
|
|
|
|
has_tty && local DOKKU_RUN_OPTS+=" -i -t"
|
|
|
|
|
is_image_herokuish_based "$IMAGE" && local EXEC_CMD="/exec"
|
|
|
|
|
# shellcheck disable=SC2086
|
2018-03-03 22:11:00 -05:00
|
|
|
docker exec $DOKKU_RUN_OPTS $ID $EXEC_CMD "${@:-$DOKKU_APP_SHELL}"
|
2016-03-01 13:26:35 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
enter_default_cmd "$@"
|