new_functions_and_fixes #1

Merged
gru merged 33 commits from new_functions_and_fixes into master 2025-11-03 14:35:20 +01:00
Showing only changes of commit 84d7139c15 - Show all commits

View File

@@ -1,9 +1,42 @@
from flask import Blueprint, render_template, request from flask import Blueprint, render_template, request, flash
import subprocess
from auth.auth_middleware import requires_auth from auth.auth_middleware import requires_auth
from utils.haproxy_config import update_haproxy_config, is_frontend_exist, count_frontends_and_backends from utils.haproxy_config import update_haproxy_config, is_frontend_exist, count_frontends_and_backends
main_bp = Blueprint('main', __name__) main_bp = Blueprint('main', __name__)
def reload_haproxy():
"""Reload HAProxy via supervisorctl"""
try:
result = subprocess.run(
['/usr/sbin/haproxy', '-f', '/etc/haproxy/haproxy.cfg', '-c'],
capture_output=True,
text=True,
timeout=10
)
if result.returncode != 0:
print(f"[HAPROXY] Config validation failed: {result.stderr}", flush=True)
return False, "Config validation failed"
result = subprocess.run(
['/usr/bin/supervisorctl', 'restart', 'haproxy'],
capture_output=True,
text=True,
timeout=10
)
if result.returncode == 0:
print(f"[HAPROXY] Restarted successfully via supervisorctl", flush=True)
return True, "HAProxy restarted successfully"
else:
print(f"[HAPROXY] Restart failed: {result.stderr}", flush=True)
return False, f"Restart failed: {result.stderr}"
except Exception as e:
print(f"[HAPROXY] Error reloading: {e}", flush=True)
return False, f"Error: {e}"
@main_bp.route('/', methods=['GET', 'POST']) @main_bp.route('/', methods=['GET', 'POST'])
@requires_auth @requires_auth
def index(): def index():
@@ -35,7 +68,7 @@ def index():
backend_server_ports = request.form.getlist('backend_server_ports[]') backend_server_ports = request.form.getlist('backend_server_ports[]')
backend_server_maxconns = request.form.getlist('backend_server_maxconns[]') backend_server_maxconns = request.form.getlist('backend_server_maxconns[]')
# Custom ACL (NEW) # Custom ACL
add_custom_acl = 'add_custom_acl' in request.form add_custom_acl = 'add_custom_acl' in request.form
custom_acl_name = request.form.get('custom_acl_name', '').strip() if add_custom_acl else '' custom_acl_name = request.form.get('custom_acl_name', '').strip() if add_custom_acl else ''
custom_acl_type = request.form.get('custom_acl_type', 'path_beg') if add_custom_acl else '' custom_acl_type = request.form.get('custom_acl_type', 'path_beg') if add_custom_acl else ''
@@ -88,13 +121,12 @@ def index():
ip = backend_server_ips[i] if i < len(backend_server_ips) else '' ip = backend_server_ips[i] if i < len(backend_server_ips) else ''
port = backend_server_ports[i] if i < len(backend_server_ports) else '' port = backend_server_ports[i] if i < len(backend_server_ports) else ''
maxconn = backend_server_maxconns[i] if i < len(backend_server_maxconns) else None maxconn = backend_server_maxconns[i] if i < len(backend_server_maxconns) else None
if ip and port: if ip and port:
backend_servers.append((name, ip, port, maxconn)) backend_servers.append((name, ip, port, maxconn))
# Validate frontend existence # Validate frontend existence
if is_frontend_exist(frontend_name, frontend_ip, frontend_port): if is_frontend_exist(frontend_name, frontend_ip, frontend_port):
return render_template('index.html', return render_template('index.html',
message="Frontend or Port already exists. Cannot add duplicate.", message="Frontend or Port already exists. Cannot add duplicate.",
message_type="danger") message_type="danger")
@@ -177,14 +209,23 @@ def index():
custom_acl_redirect_url=custom_acl_redirect_url custom_acl_redirect_url=custom_acl_redirect_url
) )
# Determine message type # ===== RELOAD HAPROXY =====
message_type = "success" if "successfully" in message else "danger" message_type = "success" if "successfully" in message.lower() else "danger"
return render_template('index.html', if message_type == "success":
reload_ok, reload_msg = reload_haproxy()
if reload_ok:
message = message + "" + reload_msg
message_type = "success"
else:
message = message + "" + reload_msg
message_type = "warning"
return render_template('index.html',
message=message, message=message,
message_type=message_type) message_type=message_type)
# GET request - display stats # GET request - display stats
frontend_count, backend_count, acl_count, layer7_count, layer4_count = count_frontends_and_backends() frontend_count, backend_count, acl_count, layer7_count, layer4_count = count_frontends_and_backends()
return render_template('index.html', return render_template('index.html',