diff --git a/net/haproxy/pkg-descr b/net/haproxy/pkg-descr
index 0b23647bf..3b578b24b 100644
--- a/net/haproxy/pkg-descr
+++ b/net/haproxy/pkg-descr
@@ -10,12 +10,15 @@ Plugin Changelog
Added:
* add support for advanced resolver properties (#2330)
+* add graceful stop timeout to service settings
+* support "monitor-uri" and "monitor fail" in rules (#2387)
Fixed:
* no haproxy.conf after restoring a config backup (#2474)
Changed:
* deploy haproxy.conf if it does not exist (#2474)
+* add new timeout (60s) which will terminate open connections when using graceful stop
3.5
diff --git a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogAction.xml b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogAction.xml
index 1e8683637..f0d17e77e 100644
--- a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogAction.xml
+++ b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/dialogAction.xml
@@ -354,6 +354,17 @@
text
+
+
+ header
+
+
+
+ action.monitor_fail_uri
+
+ text
+
+
header
diff --git a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/generalSettings.xml b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/generalSettings.xml
index d0efde12b..aa3f791ff 100644
--- a/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/generalSettings.xml
+++ b/net/haproxy/src/opnsense/mvc/app/controllers/OPNsense/HAProxy/forms/generalSettings.xml
@@ -15,6 +15,12 @@
checkbox
+
+ haproxy.general.hardStopAfter
+
+ text
+
+
haproxy.general.seamlessReload
diff --git a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml
index 15b3ce18e..8521443fe 100644
--- a/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml
+++ b/net/haproxy/src/opnsense/mvc/app/models/OPNsense/HAProxy/HAProxy.xml
@@ -1,6 +1,6 @@
//OPNsense/HAProxy
- 3.1.0
+ 3.2.0
the HAProxy load balancer
@@ -12,6 +12,12 @@
0
Y
+
+ 60s
+ /^([0-9]{1,8}(?:us|ms|s|m|h|d)?)/u
+ Should be a number between 1 and 8 characters, optionally followed by either "d", "h", "m", "s", "ms" or "us".
+ N
+
0
Y
@@ -2062,6 +2068,7 @@
http-response header replace value
http-response set-status
http-response set-var
+ monitor fail: report failure to a monitor request
tcp-request connection accept
tcp-request connection reject
tcp-request content accept
@@ -2246,6 +2253,10 @@
/^.{1,4096}$/u
N
+
+ /^.{1,4096}$/u
+ N
+
/^.{1,4096}$/u
N
diff --git a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf
index 7b40fbd6a..15dc3f76e 100644
--- a/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf
+++ b/net/haproxy/src/opnsense/service/templates/OPNsense/HAProxy/haproxy.conf
@@ -522,6 +522,14 @@
{% set action_enabled = '0' %}
# ERROR: missing parameters
{% endif %}
+{% elif action_data.type == 'monitor_fail' %}
+{% if action_data.monitor_fail_uri|default("") != "" %}
+{% do action_options.append('monitor-uri ' ~ action_data.monitor_fail_uri ~ '\n ') %}
+{% do action_options.append('monitor fail') %}
+{% else %}
+{% set action_enabled = '0' %}
+ # ERROR: missing parameters
+{% endif %}
{% elif action_data.type == 'tcp-request_connection_accept' %}
{% do action_options.append('tcp-request connection accept') %}
{% elif action_data.type == 'tcp-request_connection_reject' %}
@@ -859,6 +867,9 @@ global
{% endif %}
{% endfor %}
{% endif %}
+{% if OPNsense.HAProxy.general.hardStopAfter|default('') != '' %}
+ hard-stop-after {{OPNsense.HAProxy.general.hardStopAfter}}
+{% endif %}
{% if helpers.exists('OPNsense.HAProxy.general.tuning.maxConnections') %}
maxconn {{OPNsense.HAProxy.general.tuning.maxConnections}}
{% endif %}