chore(dev): track dev-start.sh
This commit is contained in:
parent
99eaaad3ca
commit
e88881be19
190
dev-start.sh
Executable file
190
dev-start.sh
Executable file
|
|
@ -0,0 +1,190 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e # Exit immediately if a command exits with a non-zero status.
|
||||||
|
set -u # Treat unset variables as an error.
|
||||||
|
|
||||||
|
# --- Configuration ---
|
||||||
|
# VM and Project Details
|
||||||
|
CPU_VM_NAME="osvauco-cpu-vm"
|
||||||
|
CPU_VM_ZONE="us-central1-b"
|
||||||
|
CPU_IP_NAME="osvauco-cpu-ip"
|
||||||
|
CPU_REGION="us-central1"
|
||||||
|
|
||||||
|
GPU_VM_NAME="osvauco-gpu-vm"
|
||||||
|
GPU_VM_ZONE="europe-west4-c"
|
||||||
|
GPU_IP_NAME="osvauco-gpu-ip"
|
||||||
|
GPU_REGION="europe-west4"
|
||||||
|
|
||||||
|
PROJECT_ID="propane-will-491900-m5"
|
||||||
|
VM_USER="chris_christiansen"
|
||||||
|
|
||||||
|
# Local SSH Configuration (for WSL/Git Bash on Windows)
|
||||||
|
# IMPORTANT: This path assumes you are running this script from WSL or a similar environment.
|
||||||
|
SSH_CONFIG_PATH="/mnt/c/Users/Cvias/.ssh/config"
|
||||||
|
SSH_KEY_PATH="C:\Users\Cvias\.ssh\google_compute_engine"
|
||||||
|
|
||||||
|
# Git Remotes for Verification on GPU VM
|
||||||
|
GITEA_REMOTE="http://34.158.137.245:3000/chris/osvauco.git"
|
||||||
|
GITHUB_REMOTE="git@github.com:vauco/osvauco.git"
|
||||||
|
|
||||||
|
# --- Helper Functions ---
|
||||||
|
|
||||||
|
# Function to print messages
|
||||||
|
log() {
|
||||||
|
echo "--- $1 ---"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Pre-flight check to ensure a static IP has been reserved.
|
||||||
|
preflight_check_ip() {
|
||||||
|
local ip_name="$1"
|
||||||
|
local region="$2"
|
||||||
|
log "Pre-flight check for static IP: $ip_name"
|
||||||
|
if gcloud compute addresses describe "$ip_name" --project="$PROJECT_ID" --region="$region" --format="value(name)" >/dev/null 2>&1; then
|
||||||
|
echo "✅ Static IP '$ip_name' exists."
|
||||||
|
else
|
||||||
|
echo "❌ ERROR: Static IP '$ip_name' not found in region '$region'."
|
||||||
|
echo "This script requires a reserved static IP to function reliably."
|
||||||
|
echo ""
|
||||||
|
echo "To fix this, please run the following command:"
|
||||||
|
echo "gcloud compute addresses create \"$ip_name\" --project=\"$PROJECT_ID\" --region=\"$region\" --network-tier=STANDARD"
|
||||||
|
echo ""
|
||||||
|
echo "After creating the IP, ensure it is assigned to the correct VM, then re-run this script."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to start a VM if it's not running
|
||||||
|
start_vm() {
|
||||||
|
local vm_name="$1"
|
||||||
|
local zone="$2"
|
||||||
|
log "Checking status of $vm_name"
|
||||||
|
|
||||||
|
# Get the current status of the VM.
|
||||||
|
# The `|| echo "TERMINATED"` part handles cases where gcloud might fail if the VM is in a weird state.
|
||||||
|
local status=$(gcloud compute instances describe "$vm_name" --project="$PROJECT_ID" --zone="$zone" --format="get(status)" || echo "TERMINATED")
|
||||||
|
|
||||||
|
if [ "$status" == "RUNNING" ]; then
|
||||||
|
echo "✅ $vm_name is already running."
|
||||||
|
else
|
||||||
|
echo "VM is $status. Starting $vm_name..."
|
||||||
|
gcloud compute instances start "$vm_name" --project="$PROJECT_ID" --zone="$zone"
|
||||||
|
echo "✅ $vm_name started."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to get a reserved static IP address
|
||||||
|
get_static_ip() {
|
||||||
|
local ip_name="$1"
|
||||||
|
local region="$2"
|
||||||
|
gcloud compute addresses describe "$ip_name" --project="$PROJECT_ID" --region="$region" --format="get(address)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- Main Script ---
|
||||||
|
|
||||||
|
# 0. Pre-flight checks for required infrastructure
|
||||||
|
preflight_check_ip "$CPU_IP_NAME" "$CPU_REGION"
|
||||||
|
preflight_check_ip "$GPU_IP_NAME" "$GPU_REGION"
|
||||||
|
|
||||||
|
# 1. Start VMs
|
||||||
|
start_vm "$CPU_VM_NAME" "$CPU_VM_ZONE"
|
||||||
|
start_vm "$GPU_VM_NAME" "$GPU_VM_ZONE"
|
||||||
|
|
||||||
|
# 2. Get Static IPs
|
||||||
|
log "Fetching static IP addresses"
|
||||||
|
CPU_IP=$(get_static_ip "$CPU_IP_NAME" "$CPU_REGION")
|
||||||
|
GPU_IP=$(get_static_ip "$GPU_IP_NAME" "$GPU_REGION")
|
||||||
|
echo " - CPU VM IP: $CPU_IP"
|
||||||
|
echo " - GPU VM IP: $GPU_IP"
|
||||||
|
|
||||||
|
# 3. Update SSH Config on Windows
|
||||||
|
log "Updating SSH config file at $SSH_CONFIG_PATH"
|
||||||
|
if [ ! -f "$SSH_CONFIG_PATH" ]; then
|
||||||
|
echo "⚠️ SSH config file not found. Creating it."
|
||||||
|
touch "$SSH_CONFIG_PATH"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We use a marker block to safely update the SSH config.
|
||||||
|
# This is safer than trying to edit lines in place.
|
||||||
|
MARKER_BEGIN="# BEGIN OSVAUCO-MANAGED-BLOCK"
|
||||||
|
MARKER_END="# END OSVAUCO-MANAGED-BLOCK"
|
||||||
|
|
||||||
|
# Create a temporary file to build the new config
|
||||||
|
temp_config=$(mktemp)
|
||||||
|
|
||||||
|
# Copy the config content, excluding the old managed block
|
||||||
|
awk -v begin="$MARKER_BEGIN" -v end="$MARKER_END" '
|
||||||
|
$0 == begin {in_block=1}
|
||||||
|
!in_block {print}
|
||||||
|
$0 == end {in_block=0}
|
||||||
|
' "$SSH_CONFIG_PATH" > "$temp_config"
|
||||||
|
|
||||||
|
|
||||||
|
# Append the new, updated block to the temporary file
|
||||||
|
cat <<EOT >> "$temp_config"
|
||||||
|
|
||||||
|
$MARKER_BEGIN
|
||||||
|
# This block is automatically managed by dev-start.sh
|
||||||
|
# Do not edit manually!
|
||||||
|
|
||||||
|
Host osvauco-cpu
|
||||||
|
HostName $CPU_IP
|
||||||
|
User $VM_USER
|
||||||
|
IdentityFile $SSH_KEY_PATH
|
||||||
|
|
||||||
|
Host osvauco-gpu
|
||||||
|
HostName $GPU_IP
|
||||||
|
User $VM_USER
|
||||||
|
IdentityFile $SSH_KEY_PATH
|
||||||
|
|
||||||
|
$MARKER_END
|
||||||
|
EOT
|
||||||
|
|
||||||
|
# Overwrite the original config file with the updated one
|
||||||
|
mv "$temp_config" "$SSH_CONFIG_PATH"
|
||||||
|
echo "✅ SSH config updated successfully."
|
||||||
|
|
||||||
|
# 4. Print Connect Commands
|
||||||
|
log "Setup Complete! You can now connect using:"
|
||||||
|
echo ""
|
||||||
|
echo " ssh osvauco-cpu"
|
||||||
|
echo " ssh osvauco-gpu"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 5. Verify Git Remotes on the GPU VM
|
||||||
|
log "Verifying Git remotes on $GPU_VM_NAME"
|
||||||
|
# This command runs non-interactively on the remote VM.
|
||||||
|
gcloud compute ssh "${VM_USER}@${GPU_VM_NAME}" --zone="${GPU_VM_ZONE}" --project="${PROJECT_ID}" --command="
|
||||||
|
set -e
|
||||||
|
echo '--- Running remote verification ---'
|
||||||
|
cd ~/OSVauco || { echo 'Error: ~/OSVauco directory not found.'; exit 1; }
|
||||||
|
|
||||||
|
# Check and fix 'origin' remote
|
||||||
|
ORIGIN_URL=\$(git remote get-url origin 2>/dev/null || echo '')
|
||||||
|
if [ "\$ORIGIN_URL" == "${GITEA_REMOTE}" ]; then
|
||||||
|
echo '✅ Git remote "origin" is correct.'
|
||||||
|
else
|
||||||
|
echo '⚠️ Git remote "origin" is incorrect or missing. Setting it...'
|
||||||
|
if [ -n "\$ORIGIN_URL" ]; then
|
||||||
|
git remote set-url origin "${GITEA_REMOTE}"
|
||||||
|
else
|
||||||
|
git remote add origin "${GITEA_REMOTE}"
|
||||||
|
fi
|
||||||
|
echo '✅ Remote "origin" set to: ${GITEA_REMOTE}'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check and fix 'github' remote
|
||||||
|
GITHUB_URL=\$(git remote get-url github 2>/dev/null || echo '')
|
||||||
|
if [ "\$GITHUB_URL" == "${GITHUB_REMOTE}" ]; then
|
||||||
|
echo '✅ Git remote "github" is correct.'
|
||||||
|
else
|
||||||
|
echo '⚠️ Git remote "github" is incorrect or missing. Setting it...'
|
||||||
|
if [ -n "\$GITHUB_URL" ]; then
|
||||||
|
git remote set-url github "${GITHUB_REMOTE}"
|
||||||
|
else
|
||||||
|
git remote add github "${GITHUB_REMOTE}"
|
||||||
|
fi
|
||||||
|
echo '✅ Remote "github" set to: ${GITHUB_REMOTE}'
|
||||||
|
fi
|
||||||
|
echo '--- Remote verification complete ---'
|
||||||
|
"
|
||||||
|
|
||||||
|
log "All tasks finished."
|
||||||
Loading…
Reference in New Issue
Block a user