mirror of
https://github.com/taylanbakircioglu/haproxy-openmanager.git
synced 2026-09-20 17:43:29 +00:00
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:
committed by
taylanbakircioglu
parent
8131b0b18c
commit
73ac554add
@@ -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 ---
|
||||
|
||||
Reference in New Issue
Block a user