Replace servers.json, certificates.json, and map file parsing with SQLite (WAL mode) as single source of truth. HAProxy map files are now generated from SQLite via sync_map_files(). Key changes: - Add db.py with schema, connection management, and JSON migration - Add DB_FILE config constant - Delegate file_ops.py functions to db.py - Refactor domains.py to use file_ops instead of direct list manipulation - Fix subprocess.TimeoutExpired not caught (doesn't inherit TimeoutError) - Add DB health check in health.py - Init DB on startup in server.py and __main__.py - Update all 359 tests to use SQLite-backed functions Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
"""HAProxy MCP Server - Direct Runtime API Integration
|
|
|
|
This module provides an MCP (Model Context Protocol) server for managing HAProxy
|
|
configuration and runtime state. It supports dynamic domain/server management
|
|
with HTTP backends (SSL termination at HAProxy frontend).
|
|
|
|
Environment Variables:
|
|
MCP_HOST: Host to bind MCP server (default: 0.0.0.0)
|
|
MCP_PORT: Port for MCP server (default: 8000)
|
|
HAPROXY_HOST: HAProxy Runtime API host (default: localhost)
|
|
HAPROXY_PORT: HAProxy Runtime API port (default: 9999)
|
|
HAPROXY_STATE_FILE: Path to server state file
|
|
HAPROXY_MAP_FILE: Path to domains.map file
|
|
HAPROXY_MAP_FILE_CONTAINER: Container path for domains.map
|
|
HAPROXY_SERVERS_FILE: Path to servers.json file
|
|
HAPROXY_POOL_COUNT: Number of pool backends (default: 100)
|
|
HAPROXY_MAX_SLOTS: Max servers per pool (default: 10)
|
|
"""
|
|
|
|
from mcp.server.fastmcp import FastMCP
|
|
|
|
from .config import MCP_HOST, MCP_PORT
|
|
from .db import init_db
|
|
from .tools import register_all_tools
|
|
from .tools.configuration import startup_restore
|
|
|
|
# Initialize MCP Server
|
|
mcp = FastMCP("haproxy", host=MCP_HOST, port=MCP_PORT)
|
|
|
|
# Register all tools
|
|
register_all_tools(mcp)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
init_db()
|
|
startup_restore()
|
|
mcp.run(transport="streamable-http")
|