From 2c82c9acbde2ccca9c7bb5e646a45fd646463afe Mon Sep 17 00:00:00 2001
From: Christian Poessinger <christian@poessinger.com>
Date: Wed, 27 Oct 2021 21:54:23 +0200
Subject: vrrp: T3944: reload daemon instead of restart when already running

This prevents a failover from MASTER -> BACKUP when changing any MASTER related
configuration.
---
 src/conf_mode/vrrp.py | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/conf_mode/vrrp.py b/src/conf_mode/vrrp.py
index e8f1c1f99..c72efc61f 100755
--- a/src/conf_mode/vrrp.py
+++ b/src/conf_mode/vrrp.py
@@ -28,6 +28,7 @@ from vyos.template import render
 from vyos.template import is_ipv4
 from vyos.template import is_ipv6
 from vyos.util import call
+from vyos.util import is_systemd_service_running
 from vyos.xml import defaults
 from vyos import ConfigError
 from vyos import airbag
@@ -139,7 +140,12 @@ def apply(vrrp):
         call(f'systemctl stop {service_name}')
         return None
 
-    call(f'systemctl restart {service_name}')
+    # XXX: T3944 - reload keepalived configuration if service is already running
+    # to not cause any service disruption when applying changes.
+    if is_systemd_service_running(service_name):
+        call(f'systemctl reload {service_name}')
+    else:
+        call(f'systemctl restart {service_name}')
     return None
 
 if __name__ == '__main__':
-- 
cgit v1.2.3