feat(backends): Pool-Modell — Backend = Pool, N Server pro Backend
Migration 0016: backend_servers (id, backend_id, name, address, port, weight, backup, active) + backends.lb_algorithm. Daten-Migration kopiert bestehende backends.address/port als ersten Server, dann DROP COLUMN. HAProxy-Renderer: rendert pro Backend einen Block mit `balance <algo>` + N `server`-Zeilen (weight, backup-Flag, optional check inter 5s). LB-Algorithmen: roundrobin / leastconn / source. REST: /backends/:id/servers (GET/POST), /backend-servers/:id (PUT/DELETE). Re-rendert HAProxy nach jeder Server-Mutation. UI: address/port aus Backend-Form raus, lb_algorithm-Select rein. Server verwaltet ein expandable Sub-Panel pro Backend-Row (Tabelle + Add/Edit/ Delete-Modal). Domain-Attachment-Multi-Select bleibt. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,16 +2,35 @@ package models
|
||||
|
||||
import "time"
|
||||
|
||||
// Backend ist eine Pool-Definition (Name, Scheme, Healthcheck, LB-Algo).
|
||||
// Die konkreten Upstream-Server leben in BackendServer (1:N).
|
||||
type Backend struct {
|
||||
ID int64 `gorm:"primaryKey" json:"id"`
|
||||
Name string `gorm:"column:name;uniqueIndex" json:"name"`
|
||||
Scheme string `gorm:"column:scheme" json:"scheme"`
|
||||
Address string `gorm:"column:address" json:"address"`
|
||||
Port int `gorm:"column:port" json:"port"`
|
||||
HealthCheckPath *string `gorm:"column:health_check_path" json:"health_check_path,omitempty"`
|
||||
LBAlgorithm string `gorm:"column:lb_algorithm" json:"lb_algorithm"`
|
||||
Active bool `gorm:"column:active" json:"active"`
|
||||
CreatedAt time.Time `gorm:"column:created_at" json:"created_at"`
|
||||
UpdatedAt time.Time `gorm:"column:updated_at" json:"updated_at"`
|
||||
}
|
||||
|
||||
func (Backend) TableName() string { return "backends" }
|
||||
|
||||
// BackendServer ist ein konkreter Upstream im Pool. weight steuert das
|
||||
// LB-Verhältnis (roundrobin/leastconn); backup wird nur bedient wenn
|
||||
// alle non-backup-Server down sind.
|
||||
type BackendServer struct {
|
||||
ID int64 `gorm:"primaryKey" json:"id"`
|
||||
BackendID int64 `gorm:"column:backend_id" json:"backend_id"`
|
||||
Name string `gorm:"column:name" json:"name"`
|
||||
Address string `gorm:"column:address" json:"address"`
|
||||
Port int `gorm:"column:port" json:"port"`
|
||||
Weight int `gorm:"column:weight" json:"weight"`
|
||||
Backup bool `gorm:"column:backup" json:"backup"`
|
||||
Active bool `gorm:"column:active" json:"active"`
|
||||
CreatedAt time.Time `gorm:"column:created_at" json:"created_at"`
|
||||
UpdatedAt time.Time `gorm:"column:updated_at" json:"updated_at"`
|
||||
}
|
||||
|
||||
func (BackendServer) TableName() string { return "backend_servers" }
|
||||
|
||||
Reference in New Issue
Block a user