feat: Add SSH remote execution for HAProxy on remote host
MCP server can now manage HAProxy running on a remote host via SSH. When SSH_HOST env var is set, all file I/O and subprocess commands (podman, acme.sh, openssl) are routed through SSH instead of local exec. - Add ssh_ops.py module with remote_exec, run_command, file I/O helpers - Modify file_ops.py to support remote reads/writes via SSH - Update all tools (domains, certificates, health, configuration) for SSH - Fix domains.py: replace direct fcntl usage with file_lock context manager - Add openssh-client to Docker image for SSH connectivity - Update k8s deployment with SSH env vars and SSH key secret mount Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
"""Configuration management tools for HAProxy MCP Server."""
|
||||
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
from ..config import (
|
||||
@@ -18,6 +17,7 @@ from ..file_ops import (
|
||||
get_domain_backend,
|
||||
get_backend_and_prefix,
|
||||
)
|
||||
from ..ssh_ops import run_command
|
||||
|
||||
|
||||
def restore_servers_from_config() -> int:
|
||||
@@ -167,17 +167,17 @@ def register_config_tools(mcp):
|
||||
Validation result or error details
|
||||
"""
|
||||
try:
|
||||
result = subprocess.run(
|
||||
result = run_command(
|
||||
["podman", "exec", HAPROXY_CONTAINER, "haproxy", "-c", "-f", "/usr/local/etc/haproxy/haproxy.cfg"],
|
||||
capture_output=True, text=True, timeout=SUBPROCESS_TIMEOUT
|
||||
timeout=SUBPROCESS_TIMEOUT,
|
||||
)
|
||||
if result.returncode == 0:
|
||||
return "Configuration is valid"
|
||||
return f"Configuration errors:\n{result.stderr}"
|
||||
except subprocess.TimeoutExpired:
|
||||
except TimeoutError:
|
||||
return f"Error: Command timed out after {SUBPROCESS_TIMEOUT} seconds"
|
||||
except FileNotFoundError:
|
||||
return "Error: podman command not found"
|
||||
return "Error: ssh/podman command not found"
|
||||
except OSError as e:
|
||||
return f"Error: OS error: {e}"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user