#!/usr/bin/env bash # br-backup - Fleet-wide backup management PINK='\033[38;5;205m' AMBER='\033[38;5;214m' GREEN='\033[38;5;82m' BLUE='\033[38;5;69m' NC='\033[0m' BACKUP_DIR="$HOME/.blackroad/backups" mkdir -p "$BACKUP_DIR" cmd="${1:-help}" shift 2>/dev/null case "$cmd" in create) target="${1:-all}" timestamp=$(date +%Y%m%d_%H%M%S) if [ "$target" = "all" ]; then echo -e "${PINK}Creating backups across fleet...${NC}" for host in cecilia lucidia octavia aria; do echo -e "\n${AMBER}=== $host ===${NC}" ssh "$host" '~/br-backup create' 2>/dev/null done else ssh "$target" '~/br-backup create' 2>/dev/null fi ;; collect) echo -e "${PINK}Collecting backups from fleet to local...${NC}" mkdir -p "$BACKUP_DIR/fleet" for host in cecilia lucidia octavia aria; do echo -e "\n${AMBER}=== $host ===${NC}" mkdir -p "$BACKUP_DIR/fleet/$host" # Get latest backup latest=$(ssh "$host" 'ls -t ~/.blackroad/backups/*.tar.gz 2>/dev/null | head -1') if [ -n "$latest" ]; then echo " Downloading: $(basename "$latest")" scp -q "$host:$latest" "$BACKUP_DIR/fleet/$host/" 2>/dev/null && echo -e " ${GREEN}OK${NC}" || echo " FAIL" else echo " No backups found" fi done echo -e "\n${GREEN}Backups collected to: $BACKUP_DIR/fleet/${NC}" ;; list) target="${1:-all}" if [ "$target" = "local" ]; then echo -e "${PINK}Local backups:${NC}" ls -lh "$BACKUP_DIR"/*.tar.gz 2>/dev/null || echo " No local backups" echo -e "\n${AMBER}Fleet backups:${NC}" ls -lhR "$BACKUP_DIR/fleet/" 2>/dev/null || echo " No fleet backups collected" elif [ "$target" = "all" ]; then echo -e "${PINK}Backups across fleet:${NC}" for host in cecilia lucidia octavia aria; do echo -e "\n${AMBER}=== $host ===${NC}" ssh "$host" '~/br-backup list 2>/dev/null | head -5' 2>/dev/null done else ssh "$target" '~/br-backup list' 2>/dev/null fi ;; restore) backup_file="$1" target="${2:-local}" if [ -z "$backup_file" ]; then echo "Usage: br-backup restore [target-node]" exit 1 fi if [ "$target" = "local" ]; then echo -e "${AMBER}Restoring locally...${NC}" # Local restore logic else echo -e "${AMBER}Restoring to $target...${NC}" scp "$backup_file" "$target":~/restore.tar.gz ssh "$target" 'tar xzf ~/restore.tar.gz -C ~ && rm ~/restore.tar.gz' fi ;; status) echo -e "${PINK}╭─ BACKUP STATUS ────────────────────────────────────────────────────────────────╮${NC}" for host in cecilia lucidia octavia aria; do latest=$(ssh "$host" 'ls -t ~/.blackroad/backups/*.tar.gz 2>/dev/null | head -1 | xargs basename 2>/dev/null') size=$(ssh "$host" 'du -sh ~/.blackroad/backups/ 2>/dev/null | cut -f1') count=$(ssh "$host" 'ls ~/.blackroad/backups/*.tar.gz 2>/dev/null | wc -l') echo -e "${PINK}│${NC} ${BLUE}$host${NC}: $count backups, ${size:-0B} total" done echo -e "${PINK}╰────────────────────────────────────────────────────────────────────────────────╯${NC}" ;; help|*) echo -e "${PINK}br-backup - Fleet Backup System${NC}" echo "" echo "Commands:" echo " create [node|all] Create backup" echo " collect Collect backups from fleet" echo " list [node|local|all] List backups" echo " restore [node] Restore backup" echo " status Show backup status across fleet" ;; esac