From 0d32b76a33021f77e20973744a479f25949b6bc1 Mon Sep 17 00:00:00 2001
From: Maciej Kucia <m.kucia@partner.samsung.com>
Date: Mon, 23 Jul 2018 15:39:11 +0200
Subject: [PATCH] haproxy: Support for external IPv6 (VIP)

This change allows usage of IPv6 as public address

Change-Id: Ie82ec5fb0ac9106b39948c67d34d5ef611a8fa21
Signed-off-by: Maciej Kucia <m.kucia@partner.samsung.com>
---
 ansible/roles/haproxy/tasks/config.yml   |  1 +
 ansible/roles/haproxy/tasks/precheck.yml | 10 ++++++----
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/ansible/roles/haproxy/tasks/config.yml b/ansible/roles/haproxy/tasks/config.yml
index efa47eb707..f6f9caa3ce 100644
--- a/ansible/roles/haproxy/tasks/config.yml
+++ b/ansible/roles/haproxy/tasks/config.yml
@@ -4,6 +4,7 @@
   become: true
   with_items:
     - { name: "net.ipv4.ip_nonlocal_bind", value: 1}
+    - { name: "net.ipv6.ip_nonlocal_bind", value: 1}
     - { name: "net.unix.max_dgram_qlen", value: 128}
   when:
     - set_sysctl | bool
diff --git a/ansible/roles/haproxy/tasks/precheck.yml b/ansible/roles/haproxy/tasks/precheck.yml
index 0228fb8581..8985c1007a 100644
--- a/ansible/roles/haproxy/tasks/precheck.yml
+++ b/ansible/roles/haproxy/tasks/precheck.yml
@@ -103,13 +103,15 @@
     - hostvars[inventory_hostname]['ansible_' + kolla_external_vip_interface]['active'] != True
 
 - name: Checking if kolla_internal_vip_address and kolla_external_vip_address are not pingable from any node
-  command: ping -c 3 {{ item }}
+  command: "{{ item.command }} -c 3 {{ item.address }}"
   register: ping_output
   changed_when: false
   failed_when: ping_output.rc != 1
   with_items:
-    - "{{ kolla_internal_vip_address }}"
-    - "{{ kolla_external_vip_address }}"
+    - address: "{{ kolla_internal_vip_address }}"
+      command: "{{ 'ping' if kolla_internal_vip_address|ipv4 else 'ping6' }}"
+    - address: "{{ kolla_external_vip_address }}"
+      command: "{{ 'ping' if kolla_external_vip_address|ipv4 else 'ping6' }}"
   when:
     - enable_keepalived | bool
     - "host_running_keepalived == 'None'"
@@ -153,7 +155,7 @@
     - api_interface_address != kolla_internal_vip_address
 
 - name: Checking if kolla_internal_vip_address is in the same network as api_interface on all nodes
-  command: ip -4 -o addr show dev {{ api_interface }}
+  command: ip -o addr show dev {{ api_interface }}
   register: ip_addr_output
   changed_when: false
   failed_when: >-