File size: 4,203 Bytes
2244d0f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# AntiAtropos Local Cluster Deploy
# Deploys workloads, Prometheus, and Grafana on the Kind cluster.
# Grafana port-forward starts automatically at the end.

param(
    [switch]$SkipPortForward,
    [int]$GrafanaPort = 3000
)

Write-Host "=== AntiAtropos Local Deploy ===" -ForegroundColor Cyan
Write-Host ""

# --- 1. Check cluster ---
Write-Host "[1/5] Checking Kind cluster..." -ForegroundColor Yellow
$cluster = kubectl config current-context 2>$null
if ($cluster -notmatch "antiatropos") {
    Write-Host "WARNING: Current context is '$cluster', expected 'kind-antiatropos-local'. Proceed anyway? [Y/n]"
    $r = Read-Host
    if ($r -eq 'n') { exit 1 }
}

# --- 2. Deploy workload pods ---
Write-Host "[2/5] Deploying workload pods..." -ForegroundColor Yellow
kubectl create ns prod-sre 2>&1 | Out-Null
kubectl create ns monitoring 2>&1 | Out-Null
kubectl apply -f "$PSScriptRoot\deploy\local-laptop.yaml"
Write-Host "  Waiting for workloads to be ready..."
kubectl wait --for=condition=ready pod -l app --all -n prod-sre --timeout=120s 2>$null
Write-Host "  Workloads ready."

# --- 3. Deploy Prometheus ---
Write-Host "[3/5] Deploying Prometheus..." -ForegroundColor Yellow
$promRelease = helm list -n monitoring -q 2>$null | Select-String "prometheus"
if ($promRelease) {
    helm upgrade prometheus prometheus-community/prometheus -n monitoring -f "$PSScriptRoot\deploy\prometheus-helm-values.yaml"
} else {
    helm install prometheus prometheus-community/prometheus -n monitoring -f "$PSScriptRoot\deploy\prometheus-helm-values.yaml"
}
Write-Host "  Waiting for Prometheus server..."
kubectl wait --for=condition=ready pod -l "app.kubernetes.io/name=prometheus" -n monitoring --timeout=120s 2>$null
Write-Host "  Prometheus ready."

# --- 4. Deploy Grafana ---
Write-Host "[4/5] Deploying Grafana..." -ForegroundColor Yellow
# Update dashboard ConfigMap
kubectl delete configmap grafana-dashboards -n monitoring 2>$null
kubectl create configmap grafana-dashboards -n monitoring --from-file="$PSScriptRoot\deploy\grafana\provisioning\dashboards\json\"

$grafRelease = helm list -n monitoring -q 2>$null | Select-String "grafana"
if ($grafRelease) {
    helm upgrade grafana grafana/grafana -n monitoring -f "$PSScriptRoot\deploy\grafana-helm-values.yaml"
} else {
    helm install grafana grafana/grafana -n monitoring -f "$PSScriptRoot\deploy\grafana-helm-values.yaml"
}
Write-Host "  Waiting for Grafana..."
kubectl wait --for=condition=ready pod -l "app.kubernetes.io/name=grafana" -n monitoring --timeout=120s 2>$null
Write-Host "  Grafana ready."

# --- 5. Start Grafana port-forward ---
Write-Host "[5/5] Grafana port-forward..." -ForegroundColor Yellow
if (-not $SkipPortForward) {
    # Kill any existing port-forward on the same port
    $existing = Get-NetTCPConnection -LocalPort $GrafanaPort -ErrorAction SilentlyContinue 2>$null
    if ($existing) {
        $pid = $existing.OwningProcess
        Stop-Process -Id $pid -Force -ErrorAction SilentlyContinue 2>$null
        Start-Sleep -Seconds 1
    }

    Write-Host "  Starting port-forward on localhost:$GrafanaPort..."
    $proc = Start-Process -PassThru -NoNewWindow kubectl -ArgumentList "port-forward","-n","monitoring","svc/grafana","${GrafanaPort}:80"

    Start-Sleep -Seconds 2
    # Verify the port-forward is alive
    try {
        $null = Invoke-WebRequest -Uri "http://localhost:$GrafanaPort/api/health" -UseBasicParsing -TimeoutSec 5
        Write-Host ""
        Write-Host "=== Deploy Complete ===" -ForegroundColor Green
        Write-Host "  Grafana:  http://localhost:$GrafanaPort  (admin / antiatropos)"
        Write-Host "  Dashboards: AntiAtropos Overview, AntiAtropos Live Control Plane"
        Write-Host "  Port-forward PID: $($proc.Id)"
        Write-Host ""
        Write-Host "To stop port-forward: Stop-Process -Id $($proc.Id)"
    } catch {
        Write-Host "WARNING: Port-forward started but Grafana not reachable yet. Try: kubectl port-forward -n monitoring svc/grafana ${GrafanaPort}:80"
    }
} else {
    Write-Host ""
    Write-Host "=== Deploy Complete ===" -ForegroundColor Green
    Write-Host "  To access Grafana: kubectl port-forward -n monitoring svc/grafana ${GrafanaPort}:80"
}