scripts/win/docker/sql-restore.ps1
param( [Parameter(Mandatory = $false, Position = 0)] [string]$ContainerName, [Parameter(Mandatory = $false, Position = 1)] [string]$BackupFile, [Parameter(Mandatory = $false, Position = 2)] [string]$proposed ) # ╭──────────────────────────────────────────────╮ # │ 🧠 SQL Docker Restore Process Initiated │ # ╰──────────────────────────────────────────────╯ Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor DarkCyan Write-Host "🧠 SQL Docker Restore Process Initiated" -ForegroundColor Cyan Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor DarkCyan Write-Host "" Write-Host "Container: $ContainerName" Write-Host "Backup file:: $BackupFile" . "$env:BORG_ROOT\config\globalfn.ps1" if (-not $ContainerName) { Write-Host "📦 Container not specified. Using default: '$dockerContainer'" -ForegroundColor Gray $ContainerName = $dockerContainer } # 📦 No backup file provided → prompt for selection if (-not $BackupFile) { Write-Host "📡 No backup file specified. Scanning '$backupPath' in container '$ContainerName'..." -ForegroundColor Yellow try { $backupListCommand = "ls -1 $backupPath/*.bak" $backupList = docker exec $ContainerName bash -c $backupListCommand if ($LASTEXITCODE -ne 0) { Write-Host "❌ Failed to retrieve backup list: $backupList" -ForegroundColor Red return } $backupFiles = $backupList -split "`n" | Where-Object { $_ -ne '' } if ($backupFiles.Count -eq 0) { Write-Host "🚫 No backups found in container." -ForegroundColor Red return } Write-Host "`n📋 Available backups in container:" -ForegroundColor Green $backupFiles | ForEach-Object { $fileName = Split-Path $_ -Leaf Write-Host "📁 $fileName" } Write-Host "`n🔎 Select a backup using fzf..." -ForegroundColor Yellow $selectedFile = $backupFiles | ForEach-Object { Split-Path $_ -Leaf } | fzf --height 40% if (-not $selectedFile) { Write-Host "❌ No selection made. Exiting." -ForegroundColor Red return } $BackupFile = $selectedFile $proposed = $BackupFile -split '_' | Select-Object -First 1 } catch { Write-Host "💥 Error retrieving backup list. Details: $_" -ForegroundColor Red return } } # 🧩 Composite backup handling if ($BackupFile -match '_') { $baseBackupFile = ($BackupFile -split '_')[0] + ".bak" $backupFilePath = "$dockerBackupPath/$baseBackupFile" $compositeBackupFilePath = "$dockerBackupPath/$BackupFile" Write-Host "`n🔄 Detected composite backup: '$BackupFile'" -ForegroundColor Cyan try { Write-Host "🧹 Removing existing base backup (if any): $baseBackupFile" -ForegroundColor Gray $deleteCommand = "if [ -f '$backupFilePath' ]; then rm '$backupFilePath'; fi" docker exec $ContainerName bash -c $deleteCommand Write-Host "📎 Copying ➜ '$BackupFile' → '$baseBackupFile'" -ForegroundColor Cyan $copyCommand = "cp '$compositeBackupFilePath' '$backupFilePath'" docker exec $ContainerName bash -c $copyCommand $BackupFile = $baseBackupFile } catch { Write-Host "❌ Composite handling failed. $_" -ForegroundColor Red return } } # 🎯 Confirmation Write-Host "`n🎯 Selected backup file: '$BackupFile'" -ForegroundColor Green Write-Host "🛠️ Starting restore in container: '$ContainerName'" -ForegroundColor Cyan # 🚀 Execute restore try { $executeCommand = "$dockerBackupPath/restore_database.sh '$BackupFile' '$SqlPassword' '$proposed'" Write-Host "`n🚀 Executing restore command:" -ForegroundColor Yellow Write-Host " $executeCommand" -ForegroundColor DarkGray Write-Host "🔧 Running script inside container..." -ForegroundColor Yellow $executionResult = docker exec $ContainerName bash -c $executeCommand if ($LASTEXITCODE -ne 0) { Write-Host "`n❌ Restore script failed:" -ForegroundColor Red Write-Host $executionResult return } # 💬 Output from restore Write-Host "`n📤 Output:" -ForegroundColor Gray Write-Host "──────────────────────────────────────────────" -ForegroundColor DarkGray Write-Host $executionResult Write-Host "──────────────────────────────────────────────" -ForegroundColor DarkGray Write-Host "`n✅ Restore completed successfully!" -ForegroundColor Green } catch { Write-Host "💥 Unexpected error during execution: $_" -ForegroundColor Red } # 🏁 Done Write-Host "`n🏁 SQL Restore Flow Complete" -ForegroundColor Cyan Write-Host "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -ForegroundColor DarkCyan |