From 66d59d9e393c435fa82717d0d918955bae59ba43 Mon Sep 17 00:00:00 2001
From: Viacheslav <v.gletenko@vyos.io>
Date: Sat, 8 Jan 2022 13:51:59 +0000
Subject: vrrp: T1972: Ability to set IP address on not vrrp interface

Ability to set virtual_address on not vrrp-listen interface
Add ability don't track primary vrrp interface "exclude-vrrp-interface"
Add ability to set tracking (state UP/Down) on desired interfaces
For example eth0 is used for vrrp and we want to track another eth1
interface that not belong to any vrrp-group
---
 data/templates/high-availability/keepalived.conf.tmpl | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

(limited to 'data/templates')

diff --git a/data/templates/high-availability/keepalived.conf.tmpl b/data/templates/high-availability/keepalived.conf.tmpl
index afd5f5383..da598cd1f 100644
--- a/data/templates/high-availability/keepalived.conf.tmpl
+++ b/data/templates/high-availability/keepalived.conf.tmpl
@@ -28,6 +28,9 @@ vrrp_instance {{ name }} {
     virtual_router_id {{ group_config.vrid }}
     priority {{ group_config.priority }}
     advert_int {{ group_config.advertise_interval }}
+{%     if group_config.track is defined and group_config.track.exclude_vrrp_interface is defined %}
+    dont_track_primary
+{%     endif %}
 {%     if group_config.no_preempt is not defined and group_config.preempt_delay is defined and group_config.preempt_delay is not none %}
     preempt_delay {{ group_config.preempt_delay }}
 {%     elif group_config.no_preempt is defined %}
@@ -61,8 +64,8 @@ vrrp_instance {{ name }} {
 {%     endif %}
 {%     if group_config.address is defined and group_config.address is not none %}
     virtual_ipaddress {
-{%       for addr in group_config.address %}
-        {{ addr }}
+{%       for addr, addr_config in group_config.address.items() %}
+        {{ addr }}{{ ' dev ' + addr_config.interface if addr_config.interface is defined }}
 {%       endfor %}
     }
 {%     endif %}
@@ -73,6 +76,13 @@ vrrp_instance {{ name }} {
 {%       endfor %}
     }
 {%     endif %}
+{%     if group_config.track is defined and group_config.track.interface is defined and group_config.track.interface is not none %}
+    track_interface {
+{%       for interface in group_config.track.interface %}
+        {{ interface }}
+{%       endfor %}
+    }
+{%     endif %}
 {%     if group_config.health_check is defined and group_config.health_check.script is defined and group_config.health_check.script is not none %}
     track_script {
         healthcheck_{{ name }}
@@ -113,8 +123,8 @@ vrrp_sync_group {{ name }} {
 {%   endfor %}
 {% endif %}
 
-# Virtual-server configuration
 {% if virtual_server is defined and virtual_server is not none %}
+# Virtual-server configuration
 {%   for vserver, vserver_config in virtual_server.items() %}
 virtual_server {{ vserver }} {{ vserver_config.port }} {
     delay_loop {{ vserver_config.delay_loop }}
-- 
cgit v1.2.3