Files
smom-dbis-138/scripts/deployment/generate-phase2-tfvars.sh
defiQUG 2a4753eb2d feat: restore operator WIP — PMM JSON sync entrypoint, dotenv RPC trim + secrets, pool env alignment
- Resolve stash: merge load_deployment_env path with secure-secrets and CR/LF RPC strip
- create-pmm-full-mesh-chain138.sh delegates to sync-chain138-pmm-pools-from-json.sh
- env.additions.example: canonical PMM pool defaults (cUSDT/USDT per crosscheck)
- Include Chain138 scripts, official mirror deploy scaffolding, and prior staged changes

Made-with: Cursor
2026-03-27 19:02:30 -07:00

96 lines
3.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Generate Phase 2 terraform.tfvars from Phase 1 outputs and .env file
# Usage: ./generate-phase2-tfvars.sh [output_file]
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
# Load .env via dotenv (RPC CR/LF trim). Fallback: raw source.
if [[ -f "$SCRIPT_DIR/../lib/deployment/dotenv.sh" ]]; then
# shellcheck disable=SC1090
source "$SCRIPT_DIR/../lib/deployment/dotenv.sh"
load_deployment_env --repo-root "${PROJECT_ROOT:-$REPO_ROOT}"
elif [[ -n "${PROJECT_ROOT:-}" && -f "$PROJECT_ROOT/.env" ]]; then
set -a
# shellcheck disable=SC1090
source "$PROJECT_ROOT/.env"
set +a
elif [[ -n "${REPO_ROOT:-}" && -f "$REPO_ROOT/.env" ]]; then
set -a
# shellcheck disable=SC1090
source "$REPO_ROOT/.env"
set +a
fi
OUTPUT_FILE="${1:-${PROJECT_ROOT}/terraform/phases/phase2/terraform.tfvars}"
# Load .env if it exists
if [ -f "${PROJECT_ROOT}/.env" ]; then
source "${PROJECT_ROOT}/.env"
fi
echo "Generating Phase 2 terraform.tfvars..."
echo "Output file: ${OUTPUT_FILE}"
# Check if we're in Phase 1 directory
cd "${PROJECT_ROOT}/terraform/phases/phase1"
# Get Phase 1 outputs
if ! terraform output -json phase1_us_regions > /tmp/phase1_outputs.json 2>/dev/null; then
echo "Error: Cannot get Phase 1 outputs. Ensure Phase 1 is deployed and terraform is initialized."
exit 1
fi
# Extract VM information from Phase 1 outputs
PHASE1_DATA=$(terraform output -json phase1_us_regions)
# Use .env variables with fallbacks
ENVIRONMENT="${ENVIRONMENT:-${TF_VAR_environment:-prod}}"
VM_ADMIN_USERNAME="${VM_ADMIN_USERNAME:-${TF_VAR_vm_admin_username:-besuadmin}}"
SSH_PRIVATE_KEY_PATH="${SSH_PRIVATE_KEY_PATH:-${TF_VAR_ssh_private_key_path:-}}"
if [ -z "$SSH_PRIVATE_KEY_PATH" ]; then
echo "Warning: SSH_PRIVATE_KEY_PATH not set. Please set it in .env or provide as variable."
echo "Example: SSH_PRIVATE_KEY_PATH=/path/to/private/key"
fi
# Generate terraform.tfvars
cat > "${OUTPUT_FILE}" <<EOF
# Phase 2 Terraform Variables
# Generated from Phase 1 outputs and .env file
# Generated: $(date)
environment = "${ENVIRONMENT}"
vm_admin_username = "${VM_ADMIN_USERNAME}"
ssh_private_key_path = "${SSH_PRIVATE_KEY_PATH}"
# Phase 1 VM information (auto-generated from Phase 1 outputs)
phase1_vm_info = {
EOF
# Extract region data and generate tfvars
echo "$PHASE1_DATA" | jq -r 'to_entries[] |
" \(.key) = {
vm_names = \(.value.vm_names | tojson)
private_ips = \(.value.private_ips | tojson)
public_ips = \(.value.public_ips | tojson)
resource_group = \"\(.value.resource_group)\"
region = \"\(.value.region)\"
}"' >> "${OUTPUT_FILE}"
cat >> "${OUTPUT_FILE}" <<EOF
}
# Docker compose source path (relative to this file)
docker_compose_source_path = "../../../docker/phase2"
EOF
echo "✅ Phase 2 terraform.tfvars generated successfully!"
echo "File: ${OUTPUT_FILE}"
echo ""
echo "Next steps:"
echo "1. Review the generated file: cat ${OUTPUT_FILE}"
echo "2. Update SSH_PRIVATE_KEY_PATH in .env if needed"
echo "3. Deploy Phase 2: cd terraform/phases/phase2 && terraform apply"