From 64c707317f80b233e2364a548e3e189e623ae9b2 Mon Sep 17 00:00:00 2001 From: jknapp Date: Sun, 9 Mar 2025 10:59:03 -0700 Subject: [PATCH] Adding reload function and more tweaks for backends --- haproxy_manager.py | 25 +++++++++++++++++++++++++ templates/hap_backend.tpl | 1 - templates/hap_backend_http_check.tpl | 8 ++++++++ templates/index.html | 22 ++++++++++++++++++++++ 4 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 templates/hap_backend_http_check.tpl diff --git a/haproxy_manager.py b/haproxy_manager.py index 2564789..9b204c7 100644 --- a/haproxy_manager.py +++ b/haproxy_manager.py @@ -150,6 +150,31 @@ def regenerate_conf(): 'status': 'failed', 'error': str(e) }), 500 + +@app.route('api/reload', methods=['POST']) +def reload_haproxy(): + if is_process_running('haproxy'): + subprocess.run(['echo', '"reload"', '|', 'socat', 'stdio', '/tmp/haproxy-cli']) + else: + try: + result = subprocess.run( + ['haproxy', '-W', '-S', '/tmp/haproxy-cli,level,admin', '-f', HAPROXY_CONFIG_PATH], + check=True, + capture_output=True, + text=True + ) + if result.returncode == 0: + print("HAProxy started successfully") + return jsonify({'status': 'success'}), 200 + else: + print(f"HAProxy start command returned: {result.stdout}") + print(f"Error output: {result.stderr}") + except subprocess.CalledProcessError as e: + print(f"Failed to start HAProxy: {e.stdout}\n{e.stderr}") + return jsonify({ + 'status': 'failed', + 'error': f"Failed to start HAProxy: {e.stdout}\n{e.stderr}" + }), 500 @app.route('/api/domain', methods=['POST']) def add_domain(): diff --git a/templates/hap_backend.tpl b/templates/hap_backend.tpl index e559ee2..367e566 100644 --- a/templates/hap_backend.tpl +++ b/templates/hap_backend.tpl @@ -1,7 +1,6 @@ backend {{ name }}-backend option forwardfor - option httpchk http-request add-header X-CLIENT-IP %[src] {% if ssl_enabled %}http-request set-header X-Forwarded-Proto https if { ssl_fc }{% endif %} {% for server in servers %}server {{ server.server_name }} {{ server.server_address }}:{{ server.server_port }} {{ server.server_options }}{% endfor %} diff --git a/templates/hap_backend_http_check.tpl b/templates/hap_backend_http_check.tpl new file mode 100644 index 0000000..e559ee2 --- /dev/null +++ b/templates/hap_backend_http_check.tpl @@ -0,0 +1,8 @@ + +backend {{ name }}-backend + option forwardfor + option httpchk + http-request add-header X-CLIENT-IP %[src] + {% if ssl_enabled %}http-request set-header X-Forwarded-Proto https if { ssl_fc }{% endif %} + {% for server in servers %}server {{ server.server_name }} {{ server.server_address }}:{{ server.server_port }} {{ server.server_options }}{% endfor %} + \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index 3062587..f533472 100644 --- a/templates/index.html +++ b/templates/index.html @@ -105,6 +105,7 @@

HAProxy Domain Manager

+
@@ -237,6 +238,27 @@ } }); + async function reloadHAProxy() { + try { + const response = await fetch('/api/reload', { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + } + }); + + if (response.ok) { + showStatus('HAProxy reloaded successfully', 'success'); + } else { + const data = await response.json(); + showStatus('Failed to reload HAProxy: ' + (data.message || 'Unknown error'), 'error'); + } + } catch (error) { + showStatus('Error: ' + error.message, 'error'); + console.error('Error reloading HAProxy:', error); + } + } + async function requestSSL(domain) { try { const response = await fetch('/api/ssl', {