fix(backend): Skip backends with no servers in HAProxy config generation

CRITICAL FIX: Backends without servers were causing HAProxy validation failures

Problem:
- Backend 'silbeni' (ID: 118) oluşturuldu ama server eklenmedi
- Config generator backend'i haproxy.cfg'ye yazdı ama server satırı olmadan
- HAProxy validation FAIL: 'backend has no servers'
- Agent config'i apply etmedi
- Frontend'de backend görünmedi (validation fail nedeniyle)

Root Cause:
- Config generator server olup olmadığını kontrol etmiyordu
- HAProxy en az 1 server gerektirir, yoksa validation fail olur
- Validation fail = agent apply etmez = backend haproxy.cfg'de görünmez

Solution:
- Backend loop başında server pre-check eklendi
- Server yoksa backend config'e yazılmaz ve WARNING log'lanır
- HAProxy validation her zaman başarılı olur (sadece valid backend'ler yazılır)

Impact:
 Server olmayan backend'ler artık config'e yazılmayacak
 HAProxy validation artık fail olmayacak
 Agent successfully apply edecek
 Kullanıcı frontend'de backend'i görecek (0/0 servers ⚠️ Empty tag ile)
 Kullanıcı server ekledikten sonra Apply yapınca backend haproxy.cfg'ye yazılacak

Testing:
- Server olmayan backend oluştur → Config'e yazılmaz (log: SKIPPING)
- Server ekle → Config'e yazılır
- Apply → Başarılı

Related: a39a5d6 (frontend null/undefined check)
Refs: #backend-validation #haproxy-config-generator
This commit is contained in:
Taylan Bakırcıoğlu
2025-11-17 10:09:05 +03:00
committed by taylanbakircioglu
parent 8131b0b18c
commit 73ac554add
+13
View File
@@ -441,6 +441,19 @@ async def generate_haproxy_config_for_cluster(cluster_id: int, conn: Optional[An
logger.error("Backend with missing name detected - skipping")
continue
# CRITICAL PRE-CHECK: Get servers BEFORE starting backend config
# This allows us to skip backends with no servers before writing anything
# CRITICAL FIX: Handle servers with NULL cluster_id (legacy data)
# CRITICAL: Select ssl_certificate_id for SSL ca-file path generation
servers_precheck = await db_conn.fetch("""
SELECT id FROM backend_servers
WHERE backend_name = $1 AND (cluster_id = $2 OR cluster_id IS NULL) AND is_active = TRUE
""", backend["name"], cluster_id)
if not servers_precheck or len(servers_precheck) == 0:
logger.warning(f"⚠️ CONFIG GENERATION: Skipping backend '{backend['name']}' - NO ACTIVE SERVERS. HAProxy requires at least one server per backend.")
continue
config_lines.append(f"backend {backend['name']}")
# --- HAProxy Configuration Best Practice Order ---