vault-unseal.sh.j2 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #!/bin/bash
  2. # Vault auto-unseal script
  3. # Reads unseal key from vault-init.json and unseals Vault
  4. set -e
  5. VAULT_ADDR="http://127.0.0.1:8200"
  6. INIT_FILE="/docker_mounts/vault/vault-init.json"
  7. if [ ! -f "$INIT_FILE" ]; then
  8. echo "ERROR: vault-init.json not found at $INIT_FILE"
  9. exit 1
  10. fi
  11. UNSEAL_KEY=$(jq -r '.unseal_keys_b64[0]' "$INIT_FILE")
  12. if [ -z "$UNSEAL_KEY" ]; then
  13. echo "ERROR: Could not extract unseal key from $INIT_FILE"
  14. exit 1
  15. fi
  16. # Wait for Vault to be ready
  17. for i in $(seq 1 30); do
  18. STATUS=$(curl -sf "${VAULT_ADDR}/v1/sys/health" 2>/dev/null || true)
  19. if [ -n "$STATUS" ]; then
  20. SEALED=$(echo "$STATUS" | jq -r '.sealed')
  21. if [ "$SEALED" = "false" ]; then
  22. echo "Vault is already unsealed."
  23. exit 0
  24. fi
  25. break
  26. fi
  27. echo "Waiting for Vault... ($i/30)"
  28. sleep 2
  29. done
  30. echo "Unsealing Vault..."
  31. curl -sf -X PUT "${VAULT_ADDR}/v1/sys/unseal" \
  32. -H "Content-Type: application/json" \
  33. -d "{\"key\": \"${UNSEAL_KEY}\"}"
  34. echo "Vault unsealed successfully."