From bbbe84667d49cebaa8b40366f9e3be79a47e2606 Mon Sep 17 00:00:00 2001
From: Dave McCowan <dmccowan@cisco.com>
Date: Wed, 30 Mar 2016 21:26:19 -0400
Subject: [PATCH] When two interfaces are used for two VIPs, tie them together

When a node uses two physical interfaces for its two VIPs, these
physical interfaces should be tied together, so both VIPs will
be taken out of scheduling if either one fails.  Without this change,
if a request comes into one interface that needs access to the
second interface to process the request, the original request
unnecessarily fails.  Repeating this results in a black hole where
a failing server keeps getting new requests.

Change-Id: Ic51e6584c1fbda3eb7821cb47f759c77e562cc65
Closes-Bug: #1550455
---
 .../haproxy/templates/keepalived.conf.j2      | 29 +++++--------------
 1 file changed, 8 insertions(+), 21 deletions(-)

diff --git a/ansible/roles/haproxy/templates/keepalived.conf.j2 b/ansible/roles/haproxy/templates/keepalived.conf.j2
index e0467fa788..b6abb82e23 100644
--- a/ansible/roles/haproxy/templates/keepalived.conf.j2
+++ b/ansible/roles/haproxy/templates/keepalived.conf.j2
@@ -13,28 +13,16 @@ vrrp_instance kolla_internal_vip {
     priority {{ groups['haproxy'].index(inventory_hostname) + 1 }}
     advert_int 1
     virtual_ipaddress {
-        {{ kolla_internal_vip_address }}
-    }
-    authentication {
-        auth_type PASS
-        auth_pass {{ keepalived_password }}
-    }
-    track_script {
-        check_alive
-    }
-}
-
+        {{ kolla_internal_vip_address }} dev {{  api_interface }}
 {% if haproxy_enable_external_vip | bool %}
-vrrp_instance kolla_external_vip {
-    state BACKUP
-    nopreempt
-    interface {{ kolla_external_vip_interface }}
-    virtual_router_id 52
-    priority {{ groups['haproxy'].index(inventory_hostname) + 1 }}
-    advert_int 1
-    virtual_ipaddress {
-        {{ kolla_external_vip_address }}
+        {{ kolla_external_vip_address }} dev {{ kolla_external_vip_interface }}
+{% endif %}
     }
+{% if haproxy_enable_external_vip | bool and api_interface != kolla_external_vip_interface %}
+    track_interface {
+        {{ kolla_external_vip_interface }}
+    }
+{% endif %}
     authentication {
         auth_type PASS
         auth_pass {{ keepalived_password }}
@@ -43,4 +31,3 @@ vrrp_instance kolla_external_vip {
         check_alive
     }
 }
-{% endif %}