Commit Graph

5 Commits

Author SHA1 Message Date
taylanbakircioglu 3e22776b8c fix: Improve options field UX and HAProxy config ordering
Fixed three critical issues with options field implementation:

1. Bulk Import Preview UI:
   - Added options field to frontend expandedRowRender display
   - Added options field to backend expandedRowRender display
   - Options now visible in preview before import confirmation

2. HAProxy Config Generator - Best Practice Ordering:
   Backend:
   - Moved options to position #2 (after mode/balance, before health checks)
   - New order: balance → mode → OPTIONS → httpchk → timeouts → cookie → headers

   Frontend:
   - Moved options to position #2 (after mode, before default_backend)
   - New order: bind → mode → OPTIONS → default_backend → timeouts → headers

3. UI Display Improvements:
   - Options now prominently displayed in bulk import preview
   - Better visual hierarchy with numbered comments in config generator
   - Consistent code style with proper whitespace handling

Technical Details:
- Frontend options placed after mode directive per HAProxy standards
- Backend options placed before health checks for better readability
- All options rendered as separate lines in preview
- hasDetails check updated to include options field

Files Modified:
- backend/services/haproxy_config.py: Config generation order optimized
- frontend/src/components/BulkConfigImport.js: Preview display enhanced
2025-11-13 10:12:30 +03:00
taylanbakircioglu 0fc18fde38 feat: Add HAProxy options support for backends and frontends
Implemented comprehensive HAProxy options field support for both backend and frontend entities to enable standard HAProxy directives like 'option http-keep-alive', 'option httplog', 'option forwardfor', etc.

Changes:
- Database: Added 'options' TEXT column to backends and frontends tables
- Models: Added options field to BackendConfig, BackendConfigUpdate, and FrontendConfig
- API Endpoints: Updated CREATE, UPDATE, and GET endpoints to handle options field
  * Backend: CREATE/UPDATE/GET with options support
  * Frontend: CREATE/UPDATE/GET with options support (fixed 5 SELECT queries)
- Config Generator: Added options block generation for both backends and frontends
- Bulk Import Parser:
  * Added options field to ParsedBackend and ParsedFrontend dataclasses
  * Implemented option directive parsing with validation
  * Added unknown option warnings
  * Fixed bulk parse response to include options field
- Bulk Import Merge: Added options field comparison in UPDATE logic
- UI Components:
  * BackendServers.js: Added options TextArea form field
  * FrontendManagement.js: Added options TextArea form field

Features:
- Multi-line options support (newline-separated format)
- Option validation with known HAProxy options list
- Backward compatible (NULL options for existing entities)
- Bulk import support with merge strategy
- Full CRUD support for both manual and bulk operations

Technical Details:
- Format: Newline-separated TEXT field for multiple options
- Validation: Warns about unknown options but allows them
- Config Generation: Each option written as separate directive
- Agent: Standard HAProxy config validation applies

Total: 10 files modified, ~195 lines added, 26 integration points verified
2025-11-13 10:12:30 +03:00
taylanbakircioglu a5e281b284 Feature: Backend Server SSL certificate support + Frontend SSL dropdown enhancement
✨ Backend Server SSL Certificate - Complete Implementation:

1. Model Update (backend/models/backend.py):
   - Added ssl_certificate_id field to ServerConfig model
   - Allows selecting SSL certificate from dropdown

2. API Endpoints (backend/routers/backend.py):
   - CREATE server: Added ssl_certificate_id to INSERT query
   - UPDATE server: Added ssl_certificate_id to allowed_fields
   - GET servers: Added ssl_certificate_id to SELECT queries (2 places)

3. Config Generation (backend/services/haproxy_config.py):
   - SSL certificate lookup by ID
   - Auto-generate ca-file path: /etc/ssl/haproxy/{cert_name}.pem
   - Added to server line in HAProxy config

Example Generated Config:
  Before: server es1 10.0.0.1:9200 ssl verify required
  After:  server es1 10.0.0.1:9200 ssl verify required ca-file /etc/ssl/haproxy/star-burgan-com-tr.pem

✨ Frontend SSL Dropdown Enhancement:
- Added Global/Cluster-specific tags to Frontend SSL dropdown
- Matches Backend Server SSL dropdown design
- Shows: [🌍 Global] or [📍 Cluster] with color coding

🔧 Complete SSL Workflow:
1. User edits Backend Server
2. Enables SSL
3. Selects SSL certificate from dropdown
4. Saves → ssl_certificate_id stored in DB
5. Apply Changes → Config generated with ca-file path
6. Agent downloads SSL cert to /etc/ssl/haproxy/
7. HAProxy uses ca-file for SSL verification

✅ Database Schema:
  backend_servers table now includes:
  - ssl_enabled (bool)
  - ssl_verify (str: none/required)
  - ssl_certificate_id (int, FK to ssl_certificates)

✅ HAProxy Config Format:
  server {name} {addr}:{port} ssl verify required ca-file {path}

Impact: Backend Server SSL now fully functional with certificate management
2025-11-07 11:51:15 +03:00
taylanbakircioglu 1158e5f2b1 Fix: HAProxy validation - ACL and use_backend parsing improvements
🐛 Critical Bug Fixes:
- Fixed duplicate 'acl' prefix in generated config (was: 'acl acl Name ...')
- Fixed duplicate 'use_backend' prefix in generated config
- Added use_backend directive parsing from bulk import configs
- Fixed redirect_rules list handling (was causing .strip() error)

🔧 Parser Improvements:
- Added use_backend rules parsing (stored as list like ACL rules)
- Changed use_backend_rules field from str to list for consistency
- Parser now captures all use_backend directives with conditions

🎯 Config Generation Improvements:
- Smart prefix detection: only add 'acl' if not already present
- Smart prefix detection: only add 'use_backend' if not already present
- Support both legacy (string) and new (list) format for rules
- Proper JSON parsing with fallback to newline-separated format

✅ HAProxy Validation:
- Generated config now passes HAProxy validation (haproxy -c -f)
- ACL and use_backend directives in correct HAProxy format
- Routing rules properly linked with ACL conditions

Example parsed config:
  acl Elasticsearch hdr(host) -i baremetal-elastic.burgan.com.tr
  use_backend Elasticsearch if Elasticsearch

Tested with full config including multiple ACLs and routing rules.
2025-11-07 11:51:14 +03:00
taylanbakircioglu 6aae0f4309 Initial commit 2025-10-27 12:14:03 +03:00