feat: split scheduler-docker-local report into raw, computed, and global

The bare `init-process` and `parallel-schedule-count` keys previously returned the computed value, so external tooling could not tell whether a property had been set on the app or was merely defaulting. Both properties are now also configurable with `--global`, the report exposes `computed-*` and `global-*` keys alongside the bare raw keys, and the deploy path honors the global value before falling back to the linuxserver.io vendor heuristic.
This commit is contained in:
Jose Diaz-Gonzalez
2026-05-11 22:29:28 -04:00
parent db2cbd802f
commit 7d73cf78c4
7 changed files with 272 additions and 14 deletions

View File

@@ -4,6 +4,7 @@ set -eo pipefail
source "$PLUGIN_CORE_AVAILABLE_PATH/common/functions"
source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions"
source "$PLUGIN_AVAILABLE_PATH/checks/functions"
source "$PLUGIN_AVAILABLE_PATH/scheduler-docker-local/internal-functions"
fn-scheduler-deploy-process() {
declare APP="$1" IMAGE_SOURCE_TYPE="$2" IMAGE="$3" IMAGE_TAG="$4" PROC_TYPE="$5" PROC_COUNT="$6"
@@ -36,7 +37,10 @@ fn-scheduler-deploy-process() {
CONTAINER_INDEX=$((CONTAINER_INDEX + 1))
done
INJECT_INIT_FLAG="$(fn-plugin-property-get "scheduler-docker-local" "$APP" "init-process" "")"
INJECT_INIT_FLAG="$(fn-scheduler-docker-local-init-process "$APP")"
if [[ -z "$INJECT_INIT_FLAG" ]]; then
INJECT_INIT_FLAG="$(fn-plugin-property-get-default "scheduler-docker-local" "--global" "init-process" "")"
fi
if [[ -z "$INJECT_INIT_FLAG" ]]; then
# special-case linuxserver.io images as those always use an s6-overlay
image_vendor="$("$DOCKER_BIN" image inspect --format '{{ index .Config.Labels "org.opencontainers.image.vendor" }}' "$IMAGE")"

View File

@@ -28,6 +28,6 @@ fn-help-content() {
declare desc="return help content"
cat <<help_content
scheduler-docker-local:report [<app>] [<flag>], Displays a scheduler-docker-local report for one or more apps
scheduler-docker-local:set <app> <property> (<value>), Set or clear a scheduler-docker-local property for an app
scheduler-docker-local:set [<app>|--global] <property> (<value>), Set or clear a scheduler-docker-local property for an app or globally
help_content
}

View File

@@ -42,13 +42,23 @@ cmd-scheduler-docker-local-report-single() {
if [[ "$INFO_FLAG" == "true" ]]; then
INFO_FLAG=""
fi
if [[ "$APP" != "--global" ]]; then
local flag_map=()
if [[ "$APP" == "--global" ]]; then
flag_map=(
"--scheduler-docker-local-global-init-process: $(fn-scheduler-docker-local-global-init-process "$APP")"
"--scheduler-docker-local-global-parallel-schedule-count: $(fn-scheduler-docker-local-global-parallel-schedule-count "$APP")"
)
else
verify_app_name "$APP"
flag_map=(
"--scheduler-docker-local-computed-init-process: $(fn-scheduler-docker-local-computed-init-process "$APP")"
"--scheduler-docker-local-computed-parallel-schedule-count: $(fn-scheduler-docker-local-computed-parallel-schedule-count "$APP")"
"--scheduler-docker-local-global-init-process: $(fn-scheduler-docker-local-global-init-process "$APP")"
"--scheduler-docker-local-global-parallel-schedule-count: $(fn-scheduler-docker-local-global-parallel-schedule-count "$APP")"
"--scheduler-docker-local-init-process: $(fn-scheduler-docker-local-init-process "$APP")"
"--scheduler-docker-local-parallel-schedule-count: $(fn-scheduler-docker-local-parallel-schedule-count "$APP")"
)
fi
local flag_map=(
"--scheduler-docker-local-init-process: $(fn-plugin-property-get "scheduler-docker-local" "$APP" "init-process" "true")"
"--scheduler-docker-local-parallel-schedule-count: $(fn-plugin-property-get "scheduler-docker-local" "$APP" "parallel-schedule-count" "")"
)
fn-report-validate-format "$FORMAT" "$INFO_FLAG"
@@ -85,6 +95,46 @@ cmd-scheduler-docker-local-report-single() {
fi
}
fn-scheduler-docker-local-init-process() {
declare APP="$1"
fn-plugin-property-get-default "scheduler-docker-local" "$APP" "init-process" ""
}
fn-scheduler-docker-local-computed-init-process() {
declare APP="$1"
local value
value="$(fn-scheduler-docker-local-init-process "$APP")"
if [[ -z "$value" ]]; then
value="$(fn-scheduler-docker-local-global-init-process "$APP")"
fi
echo "$value"
}
fn-scheduler-docker-local-global-init-process() {
declare APP="$1"
fn-plugin-property-get-default "scheduler-docker-local" "--global" "init-process" "true"
}
fn-scheduler-docker-local-parallel-schedule-count() {
declare APP="$1"
fn-plugin-property-get-default "scheduler-docker-local" "$APP" "parallel-schedule-count" ""
}
fn-scheduler-docker-local-computed-parallel-schedule-count() {
declare APP="$1"
local value
value="$(fn-scheduler-docker-local-parallel-schedule-count "$APP")"
if [[ -z "$value" ]]; then
value="$(fn-scheduler-docker-local-global-parallel-schedule-count "$APP")"
fi
echo "$value"
}
fn-scheduler-docker-local-global-parallel-schedule-count() {
declare APP="$1"
fn-plugin-property-get-default "scheduler-docker-local" "--global" "parallel-schedule-count" "1"
}
fn-scheduler-docker-local-get-checks-file-path() {
declare APP="$1"

View File

@@ -74,7 +74,7 @@ trigger-scheduler-docker-local-scheduler-deploy() {
DOKKU_NETWORK_BIND_ALL="$DOKKU_NETWORK_BIND_ALL" DOKKU_HEROKUISH="$DOKKU_HEROKUISH" DOKKU_CNB="$DOKKU_CNB" DOCKER_RUN_LABEL_ARGS="$DOCKER_RUN_LABEL_ARGS" DOKKU_START_CMD="$DOKKU_START_CMD" DOCKER_STOP_TIME_ARG="$DOCKER_STOP_TIME_ARG" "$PLUGIN_AVAILABLE_PATH/scheduler-docker-local/bin/scheduler-deploy-process" "$APP" "$IMAGE_SOURCE_TYPE" "$IMAGE" "$IMAGE_TAG" "$PROC_TYPE" "$PROC_COUNT"
done < <(plugn trigger ps-current-scale "$APP")
PARALLEL_DEPLOY_COUNT="$(fn-plugin-property-get "scheduler-docker-local" "$APP" "parallel-schedule-count" "1")"
PARALLEL_DEPLOY_COUNT="$(fn-scheduler-docker-local-computed-parallel-schedule-count "$APP")"
DOKKU_NETWORK_BIND_ALL="$DOKKU_NETWORK_BIND_ALL" DOKKU_HEROKUISH="$DOKKU_HEROKUISH" DOKKU_CNB="$DOKKU_CNB" DOCKER_RUN_LABEL_ARGS="$DOCKER_RUN_LABEL_ARGS" DOKKU_START_CMD="$DOKKU_START_CMD" DOCKER_STOP_TIME_ARG="$DOCKER_STOP_TIME_ARG" parallel --will-cite --halt soon,fail=1 --jobs "$PARALLEL_DEPLOY_COUNT" --ungroup <"$TMP_FILE"

View File

@@ -5,12 +5,12 @@ set -eo pipefail
[[ $DOKKU_TRACE ]] && set -x
cmd-scheduler-docker-local-set() {
declare desc="set or clear a scheduler-docker-local property for an app"
declare desc="set or clear a scheduler-docker-local property for an app or globally"
declare cmd="scheduler-docker-local:set"
[[ "$1" == "$cmd" ]] && shift 1
declare APP="$1" KEY="$2" VALUE="$3"
local VALID_KEYS=("init-process" "parallel-schedule-count")
verify_app_name "$APP"
[[ "$APP" == "--global" ]] || verify_app_name "$APP"
[[ -z "$KEY" ]] && dokku_log_fail "No key specified"