diff --git a/plugins/00_dokku-standard/subcommands/run b/plugins/00_dokku-standard/subcommands/run index a0dc3cbd2..8041be46c 100755 --- a/plugins/00_dokku-standard/subcommands/run +++ b/plugins/00_dokku-standard/subcommands/run @@ -1,53 +1,16 @@ #!/usr/bin/env bash set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" -source "$PLUGIN_AVAILABLE_PATH/ps/functions" source "$PLUGIN_AVAILABLE_PATH/config/functions" dokku_run_cmd() { declare desc="runs command in container based on app image" - local cmd="run" - [[ -z $2 ]] && dokku_log_fail "Please specify an app to run the command on" - local APP="$2"; local IMAGE_TAG=$(get_running_image_tag "$APP"); local IMAGE=$(get_deploying_app_image_name "$APP" "$IMAGE_TAG") + declare cmd="run" APP="$2" verify_app_name "$APP" - shift 2 - if [[ -z "$DOKKU_RM_CONTAINER" ]]; then - local DOKKU_APP_RM_CONTAINER=$(config_get "$APP" DOKKU_RM_CONTAINER || true) - local DOKKU_GLOBAL_RM_CONTAINER=$(config_get --global DOKKU_RM_CONTAINER || true) - local DOKKU_RM_CONTAINER=${DOKKU_APP_RM_CONTAINER:="$DOKKU_GLOBAL_RM_CONTAINER"} - fi - - local DOCKER_ARGS=$(: | plugn trigger docker-args-run "$APP" "$IMAGE_TAG") - [[ "$DOKKU_TRACE" ]] && local DOCKER_ARGS+=" -e TRACE=true " - - declare -a ARG_ARRAY - eval "ARG_ARRAY=($DOCKER_ARGS)" - - local DOKKU_RUN_OPTS=" -e DYNO=run.$RANDOM" - if [[ "$DOKKU_RM_CONTAINER" ]]; then - DOKKU_RUN_OPTS+=" --rm" - elif [[ "$DOKKU_DETACH_CONTAINER" ]]; then - DOKKU_RUN_OPTS+=" --detach" - fi - - has_tty && DOKKU_RUN_OPTS+=" -i -t" - is_image_herokuish_based "$IMAGE" && local EXEC_CMD="/exec" - - DOKKU_QUIET_OUTPUT=1 extract_procfile "$APP" - - POTENTIAL_PROCFILE_KEY="$1" - PROC_CMD=$(get_cmd_from_procfile "$APP" "$POTENTIAL_PROCFILE_KEY" || echo '') - remove_procfile "$APP" - - if [ ! -z "$PROC_CMD" ]; then - dokku_log_info1 "Found '$POTENTIAL_PROCFILE_KEY' in Procfile, running that command" - set -- "$PROC_CMD" "${@:2}" - fi - - # shellcheck disable=SC2086 - docker run $DOKKU_GLOBAL_RUN_ARGS $DOKKU_RUN_OPTS "${ARG_ARRAY[@]}" $IMAGE $EXEC_CMD "$@" + local DOKKU_SCHEDULER=$(config_get "$APP" DOKKU_SCHEDULER || echo "docker-local") + plugn trigger scheduler-run "$DOKKU_SCHEDULER" "$APP" "$@" } dokku_run_cmd "$@" diff --git a/plugins/scheduler-docker-local/plugin.toml b/plugins/scheduler-docker-local/plugin.toml new file mode 100644 index 000000000..a62860db6 --- /dev/null +++ b/plugins/scheduler-docker-local/plugin.toml @@ -0,0 +1,4 @@ +[plugin] +description = "dokku core scheduler-docker-local plugin" +version = "0.11.3" +[plugin.config] diff --git a/plugins/scheduler-docker-local/scheduler-run b/plugins/scheduler-docker-local/scheduler-run new file mode 100755 index 000000000..de53d95db --- /dev/null +++ b/plugins/scheduler-docker-local/scheduler-run @@ -0,0 +1,57 @@ +#!/usr/bin/env bash +set -eo pipefail; [[ $DOKKU_TRACE ]] && set -x +source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions" +source "$PLUGIN_AVAILABLE_PATH/ps/functions" +source "$PLUGIN_AVAILABLE_PATH/config/functions" + +scheduler-docker-local-scheduler-run() { + declare desc="runs command in container based on app image" + declare trigger="scheduler-docker-local scheduler-run" + declare DOKKU_SCHEDULER="$1" APP="$2" + shift 2 + + if [[ "$DOKKU_SCHEDULER" != "docker-local" ]]; then + return + fi + + local IMAGE_TAG=$(get_running_image_tag "$APP") + local IMAGE=$(get_deploying_app_image_name "$APP" "$IMAGE_TAG") + + if [[ -z "$DOKKU_RM_CONTAINER" ]]; then + local DOKKU_APP_RM_CONTAINER=$(config_get "$APP" DOKKU_RM_CONTAINER || true) + local DOKKU_GLOBAL_RM_CONTAINER=$(config_get --global DOKKU_RM_CONTAINER || true) + local DOKKU_RM_CONTAINER=${DOKKU_APP_RM_CONTAINER:="$DOKKU_GLOBAL_RM_CONTAINER"} + fi + + local DOCKER_ARGS=$(: | plugn trigger docker-args-run "$APP" "$IMAGE_TAG") + [[ "$DOKKU_TRACE" ]] && local DOCKER_ARGS+=" -e TRACE=true " + + declare -a ARG_ARRAY + eval "ARG_ARRAY=($DOCKER_ARGS)" + + local DOKKU_RUN_OPTS=" -e DYNO=run.$RANDOM" + if [[ "$DOKKU_RM_CONTAINER" ]]; then + DOKKU_RUN_OPTS+=" --rm" + elif [[ "$DOKKU_DETACH_CONTAINER" ]]; then + DOKKU_RUN_OPTS+=" --detach" + fi + + has_tty && DOKKU_RUN_OPTS+=" -i -t" + is_image_herokuish_based "$IMAGE" && local EXEC_CMD="/exec" + + DOKKU_QUIET_OUTPUT=1 extract_procfile "$APP" + + POTENTIAL_PROCFILE_KEY="$1" + PROC_CMD=$(get_cmd_from_procfile "$APP" "$POTENTIAL_PROCFILE_KEY" || echo '') + remove_procfile "$APP" + + if [ ! -z "$PROC_CMD" ]; then + dokku_log_info1 "Found '$POTENTIAL_PROCFILE_KEY' in Procfile, running that command" + set -- "$PROC_CMD" "${@:2}" + fi + + # shellcheck disable=SC2086 + docker run $DOKKU_GLOBAL_RUN_ARGS $DOKKU_RUN_OPTS "${ARG_ARRAY[@]}" $IMAGE $EXEC_CMD "$@" +} + +scheduler-docker-local-scheduler-run "$@"