Enhance Docker setup and scripts by adding default environment variables for BGP configuration, improving the update process with safe and quick update options, and implementing testing capabilities in the prefix loader script. Update start.sh to include permission checks and network connectivity validation during ExaBGP startup.
Build and Push Docker Image / build (push) Successful in 3m18s
Build and Push Docker Image / build (push) Successful in 3m18s
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
# Скрипт для безопасного обновления BGP Server контейнера
|
||||
|
||||
param(
|
||||
[string]$ContainerName = "bgp-server",
|
||||
[string]$ImageName = "git.shts.su/infra/bgp-server:latest",
|
||||
[string]$DataPath = "./data",
|
||||
[string]$LogsPath = "./logs",
|
||||
[switch]$Force
|
||||
)
|
||||
|
||||
Write-Host "=== BGP Server Container Update Script ===" -ForegroundColor Green
|
||||
|
||||
# Проверка существования контейнера
|
||||
$containerExists = docker ps -a --filter "name=$ContainerName" --format "table {{.Names}}" | Select-String $ContainerName
|
||||
|
||||
if ($containerExists) {
|
||||
Write-Host "Found existing container: $ContainerName" -ForegroundColor Yellow
|
||||
|
||||
if (-not $Force) {
|
||||
$response = Read-Host "Do you want to update the container? (y/N)"
|
||||
if ($response -ne "y" -and $response -ne "Y") {
|
||||
Write-Host "Update cancelled." -ForegroundColor Red
|
||||
exit 0
|
||||
}
|
||||
}
|
||||
|
||||
# Остановка и удаление старого контейнера
|
||||
Write-Host "Stopping container..." -ForegroundColor Yellow
|
||||
docker stop $ContainerName
|
||||
|
||||
Write-Host "Removing container..." -ForegroundColor Yellow
|
||||
docker rm $ContainerName
|
||||
} else {
|
||||
Write-Host "No existing container found. Creating new one..." -ForegroundColor Green
|
||||
}
|
||||
|
||||
# Создание директорий если не существуют
|
||||
if (-not (Test-Path $DataPath)) {
|
||||
Write-Host "Creating data directory: $DataPath" -ForegroundColor Yellow
|
||||
New-Item -ItemType Directory -Path $DataPath -Force | Out-Null
|
||||
}
|
||||
|
||||
if (-not (Test-Path $LogsPath)) {
|
||||
Write-Host "Creating logs directory: $LogsPath" -ForegroundColor Yellow
|
||||
New-Item -ItemType Directory -Path $LogsPath -Force | Out-Null
|
||||
}
|
||||
|
||||
# Загрузка нового образа
|
||||
Write-Host "Pulling latest image..." -ForegroundColor Yellow
|
||||
docker pull $ImageName
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Host "Failed to pull image. Exiting." -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Запуск нового контейнера
|
||||
Write-Host "Starting new container..." -ForegroundColor Yellow
|
||||
$currentPath = Get-Location
|
||||
$dataVolume = "${currentPath}\${DataPath}:/app/data:ro"
|
||||
$logsVolume = "${currentPath}\${LogsPath}:/app/logs"
|
||||
|
||||
docker run -d `
|
||||
--name $ContainerName `
|
||||
--restart unless-stopped `
|
||||
-p 179:179 `
|
||||
-v $dataVolume `
|
||||
-v $logsVolume `
|
||||
$ImageName
|
||||
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Host "Container started successfully!" -ForegroundColor Green
|
||||
|
||||
# Ожидание запуска
|
||||
Write-Host "Waiting for container to start..." -ForegroundColor Yellow
|
||||
Start-Sleep -Seconds 5
|
||||
|
||||
# Проверка статуса
|
||||
$status = docker ps --filter "name=$ContainerName" --format "table {{.Status}}"
|
||||
Write-Host "Container status: $status" -ForegroundColor Cyan
|
||||
|
||||
# Показ логов
|
||||
Write-Host "Recent logs:" -ForegroundColor Cyan
|
||||
docker logs --tail=10 $ContainerName
|
||||
|
||||
Write-Host "`nContainer update completed successfully!" -ForegroundColor Green
|
||||
Write-Host "To view logs: docker logs -f $ContainerName" -ForegroundColor Cyan
|
||||
Write-Host "To check status: docker ps" -ForegroundColor Cyan
|
||||
} else {
|
||||
Write-Host "Failed to start container. Check the error above." -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
Reference in New Issue
Block a user