fix(deploy): reconcile local vector credentials safely
This commit is contained in:
Executable
+71
@@ -0,0 +1,71 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
cd "$(dirname "$0")/.."
|
||||
tmp=$(mktemp -d)
|
||||
trap 'rm -rf "$tmp"' EXIT HUP INT TERM
|
||||
|
||||
fake="$tmp/docker"
|
||||
log="$tmp/docker.log"
|
||||
state="$tmp/state"
|
||||
|
||||
cat >"$fake" <<'SH'
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
printf '%s\n' "$*" >>"$FAKE_DOCKER_LOG"
|
||||
|
||||
if [ "${FAKE_COLLISION:-0}" = 1 ] && [ "$1 $2" = "ps -aq" ]; then
|
||||
printf '%s\n' collision-container
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$1 $2" = "ps -aq" ] || [ "$1 $2" = "volume ls" ] || [ "$1 $2" = "network ls" ]; then
|
||||
if [ "${FAKE_MISMATCH_ON_CLEANUP:-0}" = 1 ] && [ -f "$FAKE_DOCKER_STATE" ]; then
|
||||
printf '%s\n' foreign-resource
|
||||
fi
|
||||
: >"$FAKE_DOCKER_STATE"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ "$1" = inspect ] || [ "$1 $2" = "volume inspect" ] || [ "$1 $2" = "network inspect" ]; then
|
||||
printf '%s\n' foreign-owner
|
||||
exit 0
|
||||
fi
|
||||
|
||||
case "$*" in
|
||||
*"config --services"*) printf '%s\n' vector-db vector-reconcile vector-migrate core frontend ;;
|
||||
*"run --rm --no-deps vector-migrate"*) printf '%s\n' '{"applied":["001","002","003"],"drifted":[],"pending":[]}' ;;
|
||||
esac
|
||||
exit 0
|
||||
SH
|
||||
chmod 0755 "$fake"
|
||||
|
||||
if PATH="$tmp:$PATH" FAKE_DOCKER_LOG="$log" FAKE_DOCKER_STATE="$state" \
|
||||
SMOKE_PROJECT=operator-owned ./scripts/local-vector-smoke.sh >"$tmp/out" 2>"$tmp/err"; then
|
||||
echo "smoke accepted caller-controlled SMOKE_PROJECT" >&2
|
||||
exit 1
|
||||
fi
|
||||
grep -q 'SMOKE_PROJECT is not accepted' "$tmp/err"
|
||||
test ! -s "$log"
|
||||
|
||||
: >"$log"
|
||||
rm -f "$state"
|
||||
PATH="$tmp:$PATH" FAKE_DOCKER_LOG="$log" FAKE_DOCKER_STATE="$state" \
|
||||
FAKE_COLLISION=1 ./scripts/local-vector-smoke.sh >"$tmp/out" 2>"$tmp/err" || true
|
||||
grep -q 'refusing existing Compose project resources' "$tmp/err"
|
||||
if grep -q 'compose.*up' "$log"; then
|
||||
echo "smoke started after detecting a project collision" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
: >"$log"
|
||||
rm -f "$state"
|
||||
PATH="$tmp:$PATH" FAKE_DOCKER_LOG="$log" FAKE_DOCKER_STATE="$state" \
|
||||
FAKE_MISMATCH_ON_CLEANUP=1 ./scripts/local-vector-smoke.sh >"$tmp/out" 2>"$tmp/err" || true
|
||||
grep -q 'refusing cleanup of resource not owned by this smoke' "$tmp/err"
|
||||
if grep -q 'down --volumes' "$log"; then
|
||||
echo "smoke removed resources after ownership mismatch" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "local-vector smoke collision and cleanup ownership contracts passed."
|
||||
Reference in New Issue
Block a user