vault-unseal.sh.j2 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #!/bin/bash
  2. # Vault auto-unseal script — managed by Ansible, do not edit manually
  3. # Reads unseal key from /etc/vault.d/unseal.key and unseals Vault
  4. set -e
  5. VAULT_ADDR="http://127.0.0.1:{{ vault_port }}"
  6. UNSEAL_KEY_FILE="/etc/vault.d/unseal.key"
  7. if [ ! -f "$UNSEAL_KEY_FILE" ]; then
  8. echo "ERROR: unseal key not found at $UNSEAL_KEY_FILE"
  9. exit 1
  10. fi
  11. UNSEAL_KEY=$(cat "$UNSEAL_KEY_FILE")
  12. if [ -z "$UNSEAL_KEY" ]; then
  13. echo "ERROR: unseal key file is empty"
  14. exit 1
  15. fi
  16. # Wait for Vault API to become ready (up to 60 s)
  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 API... ($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 ""
  35. echo "Vault unsealed successfully."