diff options
| author | Daniil Baturin <daniil@vyos.io> | 2026-04-28 13:16:47 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-28 13:16:47 +0100 |
| commit | e834a6d51090b2a9261f80464be05d4984cbcce0 (patch) | |
| tree | e140319f165a50f0c764255cf31f3817059b86d1 | |
| parent | 6bbd589ae563e4737845217710ff80c73a3b8fc4 (diff) | |
| parent | c2fa136a3589c30d98cffa49c9dd7682c81c2002 (diff) | |
| download | vyos-1x-e834a6d51090b2a9261f80464be05d4984cbcce0.tar.gz vyos-1x-e834a6d51090b2a9261f80464be05d4984cbcce0.zip | |
Merge pull request #5151 from natali-rs1985/T8293
T8293: Add ability to set timeout for high-availability health-check
| -rw-r--r-- | data/templates/high-availability/keepalived.conf.j2 | 6 | ||||
| -rw-r--r-- | interface-definitions/high-availability.xml.in | 24 | ||||
| -rwxr-xr-x | smoketest/scripts/cli/test_high-availability_vrrp.py | 11 | ||||
| -rwxr-xr-x | src/conf_mode/high-availability.py | 9 |
4 files changed, 50 insertions, 0 deletions
diff --git a/data/templates/high-availability/keepalived.conf.j2 b/data/templates/high-availability/keepalived.conf.j2 index f0ed7909c..a45befdb6 100644 --- a/data/templates/high-availability/keepalived.conf.j2 +++ b/data/templates/high-availability/keepalived.conf.j2 @@ -47,6 +47,9 @@ vrrp_script healthcheck_sg_{{ name }} { script "/usr/bin/ping -c1 {{ sync_group_config.health_check.ping }}" {% endif %} interval {{ sync_group_config.health_check.interval }} +{% if sync_group_config.health_check.timeout is vyos_defined %} + timeout {{ sync_group_config.health_check.timeout }} +{% endif %} fall {{ sync_group_config.health_check.failure_count }} rise 1 } @@ -64,6 +67,9 @@ vrrp_script healthcheck_{{ name }} { script "/usr/bin/ping -c1 {{ group_config.health_check.ping }}" {% endif %} interval {{ group_config.health_check.interval }} +{% if group_config.health_check.timeout is vyos_defined %} + timeout {{ group_config.health_check.timeout }} +{% endif %} fall {{ group_config.health_check.failure_count }} rise 1 } diff --git a/interface-definitions/high-availability.xml.in b/interface-definitions/high-availability.xml.in index bb132e337..70ac308a3 100644 --- a/interface-definitions/high-availability.xml.in +++ b/interface-definitions/high-availability.xml.in @@ -170,6 +170,18 @@ </constraint> </properties> </leafNode> + <leafNode name="timeout"> + <properties> + <help>Health check script timeout in seconds</help> + <valueHelp> + <format>u32</format> + <description>Timeout in seconds</description> + </valueHelp> + <constraint> + <validator name="numeric" argument="--positive"/> + </constraint> + </properties> + </leafNode> </children> </node> <leafNode name="hello-source-address"> @@ -393,6 +405,18 @@ </constraint> </properties> </leafNode> + <leafNode name="timeout"> + <properties> + <help>Health check script timeout in seconds</help> + <valueHelp> + <format>u32</format> + <description>Timeout in seconds</description> + </valueHelp> + <constraint> + <validator name="numeric" argument="--positive"/> + </constraint> + </properties> + </leafNode> </children> </node> #include <include/vrrp-transition-script.xml.i> diff --git a/smoketest/scripts/cli/test_high-availability_vrrp.py b/smoketest/scripts/cli/test_high-availability_vrrp.py index f1f1c7df2..93ef9a09b 100755 --- a/smoketest/scripts/cli/test_high-availability_vrrp.py +++ b/smoketest/scripts/cli/test_high-availability_vrrp.py @@ -279,6 +279,7 @@ class TestVRRP(VyOSUnitTestSHIM.TestCase): def test_check_health_script(self): sync_group = 'VyOS' + timeout = '100' for group in groups: vlan_id = group.lstrip('VLAN') @@ -329,6 +330,16 @@ class TestVRRP(VyOSUnitTestSHIM.TestCase): config = getConfig(f'vrrp_sync_group {sync_group}') self.assertIn(f'track_script', config) + self.cli_set( + base_path + + ['vrrp', 'sync-group', sync_group, 'health-check', 'timeout', timeout] + ) + # commit changes + self.cli_commit() + + config = getConfig(f'vrrp_script healthcheck_sg_{sync_group}') + self.assertIn(f'timeout {timeout}', config) + if __name__ == '__main__': unittest.main(verbosity=2, failfast=VyOSUnitTestSHIM.TestCase.debug_on()) diff --git a/src/conf_mode/high-availability.py b/src/conf_mode/high-availability.py index 48a7d8abc..175929547 100755 --- a/src/conf_mode/high-availability.py +++ b/src/conf_mode/high-availability.py @@ -188,6 +188,15 @@ def _validate_health_check(group, group_config): # to avoid generating useless config statements in keepalived.conf del group_config["health_check"] + if 'timeout' in group_config.get('health_check', {}): + interval = int(group_config['health_check']['interval']) + timeout = int(group_config['health_check']['timeout']) + if timeout < interval: + Warning( + f'Health check timeout ({timeout}s) is less than interval ({interval}s) ' + f'for VRRP group "{group}", script may be killed before completion' + ) + def generate(ha): if not ha or 'disable' in ha: |
