You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
3.8 KiB

# Deploy ASL3 WX Announce to Remote Node
# USAGE: .\deploy.ps1
# --- CONFIGURATION (PLEASE EDIT THESE) ---
$REMOTE_HOST = "192.168.50.61" # REPLACE with your Node's IP address
$REMOTE_USER = "admin" # REPLACE with your SSH username (e.g. repeater, root, admin)
$REMOTE_PATH = "/opt/asl3_wx_announce" # Standard location
# -----------------------------------------
Write-Host "Deploying to ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_PATH}..." -ForegroundColor Cyan
# 1. Create a local tar archive of the files to minimise SCP calls (and password prompts)
Write-Host "Bundling files..."
$TAR_FILE = "deploy_package.tar"
tar -cvf $TAR_FILE asl3_wx_announce requirements.txt config.yaml diagnose_audio.py asl3-wx.service
if ($LASTEXITCODE -ne 0) {
Write-Host "Error creating tar archive." -ForegroundColor Red
exit
}
# 2. Upload the tar archive (Prompt #1)
Write-Host "Uploading package (You may be asked for your password)..."
scp $TAR_FILE ${REMOTE_USER}@${REMOTE_HOST}:/tmp/$TAR_FILE
if ($LASTEXITCODE -ne 0) {
Write-Host "SCP failed. Check connection." -ForegroundColor Red
exit
}
# 3. Extract on remote server (Prompt #2)
Write-Host "Extracting on remote server (You may be asked for your password again)..."
# Service runs as root usually.
# 1. Create directory
# 2. Extract
# 3. Create venv if not exists
# 4. Install requirements in venv
# 5. Setup service
$REMOTE_CMD = "sudo mkdir -p ${REMOTE_PATH} && sudo tar -xvf /tmp/${TAR_FILE} -C ${REMOTE_PATH} && rm /tmp/${TAR_FILE} && sudo python3 -m venv ${REMOTE_PATH}/venv && sudo ${REMOTE_PATH}/venv/bin/pip install -r ${REMOTE_PATH}/requirements.txt && sudo cp ${REMOTE_PATH}/asl3-wx.service /etc/systemd/system/ && sudo systemctl daemon-reload && sudo systemctl enable asl3-wx && sudo systemctl restart asl3-wx"
ssh ${REMOTE_USER}@${REMOTE_HOST} $REMOTE_CMD
# 4. Cleanup local artifact
Remove-Item $TAR_FILE
Write-Host "Deployment Complete! The 'asl3-wx' service is running in the background." -ForegroundColor Green
Write-Host "To check status/logs:"
Write-Host " ssh ${REMOTE_USER}@${REMOTE_HOST} 'sudo systemctl status asl3-wx'"
Write-Host " ssh ${REMOTE_USER}@${REMOTE_HOST} 'sudo journalctl -u asl3-wx -f'"
Write-Host "To stop:"
Write-Host " ssh ${REMOTE_USER}@${REMOTE_HOST} 'sudo systemctl stop asl3-wx'"
# --- Display Config Summary ---
Write-Host ""
Write-Host "--- Configuration Summary ---" -ForegroundColor Yellow
$configContent = Get-Content config.yaml -Raw
# Helper function for regex extraction
function Get-ConfigValue {
param ($pattern, $default = "Unknown")
if ($configContent -match $pattern) { return $Matches[1].Trim('"').Trim("'") }
return $default
}
$callsign = Get-ConfigValue "callsign:\s*(.*)"
$check_int = Get-ConfigValue "check_interval_minutes:\s*(\d+)"
$active_int = Get-ConfigValue "active_check_interval_minutes:\s*(\d+)"
$timezone = Get-ConfigValue "timezone:\s*(.*)"
$hourly_enabled = Get-ConfigValue "hourly_report:\s*\n\s*enabled:\s*(true|false)" "false"
$hourly_minute = Get-ConfigValue "minute:\s*(\d+)"
Write-Host "Callsign: $callsign"
Write-Host "Timezone: $timezone"
Write-Host "Check Interval: $check_int minutes (Normal)"
Write-Host "Active Interval: $active_int minutes (During Alerts)"
if ($hourly_enabled -eq "true") {
Write-Host "Hourly Report: Enabled (at minute $hourly_minute)"
# Parse Content flags
$content_keys = "time", "time_error", "conditions", "forecast", "forecast_verbose", "astro", "solar_flux", "status", "code_source"
$enabled_content = @()
foreach ($key in $content_keys) {
if ($configContent -match "${key}:\s*true") {
$enabled_content += $key
}
}
$content_str = $enabled_content -join ", "
Write-Host "Hourly Content: $content_str"
}
else {
Write-Host "Hourly Report: Disabled"
}
Write-Host "-----------------------------"
Write-Host ""

Powered by TurnKey Linux.