76 lines
1.5 KiB
Bash
76 lines
1.5 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
NOMAD_SECRETS_DIR="${NOMAD_SECRETS_DIR:-}"
|
|
NOMAD_TOKEN="${NOMAD_TOKEN:-}"
|
|
NOMAD_ADDR="${NOMAD_ADDR:-localhost}"
|
|
|
|
TARGET_NAMESPACE="${TARGET_NAMESPACE:-default}"
|
|
TARGET_JOB="${TARGET_JOB:-}"
|
|
TARGET_GROUP="${TARGET_GROUP:-}"
|
|
|
|
TARGET_COUNT="${TARGET_COUNT:-0}"
|
|
|
|
CURL_ARGS=(
|
|
--silent
|
|
--show-error
|
|
--fail-with-body
|
|
)
|
|
|
|
if [[ -n "${NOMAD_TOKEN}" ]]; then
|
|
CURL_ARGS+=(-H "Authorization: Bearer ${NOMAD_TOKEN}")
|
|
fi
|
|
if [[ -n "${NOMAD_SECRETS_DIR}" ]]; then
|
|
CURL_ARGS+=(--unix-socket "${NOMAD_SECRETS_DIR}/api.sock")
|
|
fi
|
|
|
|
if ! [[ "$TARGET_COUNT" =~ ^[+-]?[0-9]+$ ]]; then
|
|
echo "$TARGET_COUNT is not a number"
|
|
exit 1
|
|
fi
|
|
|
|
curl "${CURL_ARGS[@]}" \
|
|
-X POST \
|
|
"${NOMAD_ADDR}/v1/job/${TARGET_JOB}/scale?namespace=${TARGET_NAMESPACE}" \
|
|
-H "Content-Type: application/json" \
|
|
-d "$(jq -n \
|
|
--arg group "$TARGET_GROUP" \
|
|
--arg count "$TARGET_COUNT" \
|
|
'{
|
|
Count: ($count|tonumber),
|
|
Target: {
|
|
"Group": ($group)
|
|
},
|
|
Message: "Scaling up to perform backup"
|
|
}'
|
|
)"
|
|
|
|
while true; do
|
|
allocations=$(
|
|
curl "${CURL_ARGS[@]}" \
|
|
"${NOMAD_ADDR}/v1/job/${TARGET_JOB}/allocations?namespace=${TARGET_NAMESPACE}"
|
|
)
|
|
|
|
count=$(
|
|
jq --arg group "$TARGET_GROUP" '
|
|
[
|
|
.[]
|
|
| select(.TaskGroup == $group)
|
|
| select(
|
|
.ClientStatus != "complete"
|
|
and .ClientStatus != "dead"
|
|
)
|
|
] | length
|
|
' <<< "$allocations"
|
|
)
|
|
|
|
echo "Remaining allocations: ${count}"
|
|
|
|
if [[ "$count" -eq $TARGET_COUNT ]]; then
|
|
break
|
|
fi
|
|
|
|
sleep 5
|
|
done
|