34 lines
1.3 KiB
Bash
Executable File
34 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#MISE description="Запустить пример Go-сервиса: mise run example:up [сервис] [static|dynamic]"
|
|
set -euo pipefail
|
|
|
|
roles=$(terraform -chdir=vault output -json approle_role_ids)
|
|
service=${1:-$(jq -r 'keys[0]' <<<"$roles")}
|
|
creds=${2:-static}
|
|
compose=(docker compose -f examples/go-service/compose.yml)
|
|
url=http://127.0.0.1:${EXAMPLE_PORT:-8090}/
|
|
|
|
role_id=$(jq -er --arg s "$service" '.[$s]' <<<"$roles") ||
|
|
{ echo "нет роли AppRole для сервиса $service" >&2; exit 1; }
|
|
secret_id=$(curl -sS -X POST -H "X-Vault-Token: $VAULT_TOKEN" -d '{"ttl": "5m", "num_uses": 1}' \
|
|
"$VAULT_ADDR/v1/auth/approle/role/$service/secret-id" | jq -er .data.secret_id)
|
|
|
|
export SERVICE_NAME=$service VAULT_ROLE_ID=$role_id VAULT_SECRET_ID=$secret_id POSTGRES_CREDS=$creds
|
|
INFRA_NETWORK=$(docker compose config --format json | jq -er .networks.infra.name)
|
|
export INFRA_NETWORK
|
|
"${compose[@]}" up -d --build --force-recreate --quiet-pull 2>&1 | tail -3
|
|
|
|
for _ in $(seq 1 30); do
|
|
if response=$(curl -fsS "$url" 2>/dev/null); then
|
|
"${compose[@]}" logs --no-log-prefix example
|
|
printf '\nGET %s\n' "$url"
|
|
jq . <<<"$response"
|
|
exit 0
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
"${compose[@]}" logs --no-log-prefix example
|
|
echo "сервис не ответил на $url" >&2
|
|
exit 1
|