Make release compose topology immutable and verifiable
This commit is contained in:
36
scripts/verify_release_topology.sh
Executable file
36
scripts/verify_release_topology.sh
Executable file
@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env sh
|
||||
set -eu
|
||||
|
||||
ROOT_DIR="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)"
|
||||
cd "$ROOT_DIR"
|
||||
|
||||
MERGED_FILE="$(mktemp)"
|
||||
trap 'rm -f "$MERGED_FILE"' EXIT
|
||||
|
||||
docker compose -f docker-compose.yml -f docker-compose.release.yml config > "$MERGED_FILE"
|
||||
|
||||
check_service_bind_mount() {
|
||||
service_name="$1"
|
||||
if awk -v service=" ${service_name}:" -v root="$ROOT_DIR" '
|
||||
BEGIN { in_service = 0 }
|
||||
$0 == service { in_service = 1; next }
|
||||
in_service && /^ [a-zA-Z0-9_]+:/ { in_service = 0 }
|
||||
in_service && /source: / {
|
||||
if (index($0, root) > 0) {
|
||||
print $0
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
' "$MERGED_FILE"; then
|
||||
printf "OK: %s has no source bind mount from repository path.\n" "$service_name"
|
||||
else
|
||||
printf "ERROR: %s still has a source bind mount from repository path in release config.\n" "$service_name" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_service_bind_mount "web"
|
||||
check_service_bind_mount "celery_worker"
|
||||
check_service_bind_mount "celery_beat"
|
||||
|
||||
echo "Release topology verification passed."
|
||||
Reference in New Issue
Block a user