aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xansible/roles/haproxy/defaults/main.yml11
-rwxr-xr-xansible/roles/haproxy/tasks/config.yml11
-rwxr-xr-xansible/roles/haproxy/tasks/start.yml10
-rw-r--r--ansible/roles/haproxy/templates/keepalived.conf.j219
-rwxr-xr-xdocker/centos/binary/keepalived/Dockerfile3
l---------docker/centos/binary/keepalived/config-external.sh1
l---------docker/centos/binary/keepalived/config-internal.sh1
-rwxr-xr-xdocker/common/keepalived/config-external.sh11
-rwxr-xr-xdocker/common/keepalived/config-internal.sh31
-rwxr-xr-xdocker/common/keepalived/start.sh34
10 files changed, 105 insertions, 27 deletions
diff --git a/ansible/roles/haproxy/defaults/main.yml b/ansible/roles/haproxy/defaults/main.yml
index 1d8b444a6..910ddd4c8 100755
--- a/ansible/roles/haproxy/defaults/main.yml
+++ b/ansible/roles/haproxy/defaults/main.yml
@@ -14,3 +14,14 @@ kolla_haproxy_container_name: "haproxy"
docker_haproxy_image: "{{ docker_haproxy_registry }}{{ docker_haproxy_namespace }}/{{ kolla_haproxy_base_distro }}-{{ kolla_haproxy_install_type }}-{{ kolla_haproxy_container_name }}"
docker_haproxy_tag: "{{ openstack_release }}"
docker_haproxy_image_full: "{{ docker_haproxy_image }}:{{ docker_haproxy_tag }}"
+
+
+docker_keepalived_registry: "{{ docker_registry }}"
+docker_keepalived_namespace: "{{ docker_namespace }}"
+kolla_keepalived_base_distro: "{{ kolla_base_distro }}"
+kolla_keepalived_install_type: "{{ kolla_install_type }}"
+kolla_keepalived_container_name: "keepalived"
+
+docker_keepalived_image: "{{ docker_keepalived_registry }}{{ docker_keepalived_namespace }}/{{ kolla_keepalived_base_distro }}-{{ kolla_keepalived_install_type }}-{{ kolla_keepalived_container_name }}"
+docker_keepalived_tag: "{{ openstack_release }}"
+docker_keepalived_image_full: "{{ docker_keepalived_image }}:{{ docker_keepalived_tag }}"
diff --git a/ansible/roles/haproxy/tasks/config.yml b/ansible/roles/haproxy/tasks/config.yml
index 6aa4c0bba..d71ae7232 100755
--- a/ansible/roles/haproxy/tasks/config.yml
+++ b/ansible/roles/haproxy/tasks/config.yml
@@ -12,3 +12,14 @@
- name: Allowing non-local IP binding
sysctl: name="net.ipv4.ip_nonlocal_bind" value=1 sysctl_set=yes
+
+- name: Ensuring config directory exists
+ file:
+ path: "{{ node_config_directory }}/keepalived/"
+ state: "directory"
+ recurse: "yes"
+
+- name: Copying over config(s)
+ template:
+ src: "keepalived.conf.j2"
+ dest: "{{ node_config_directory }}/keepalived/keepalived.conf"
diff --git a/ansible/roles/haproxy/tasks/start.yml b/ansible/roles/haproxy/tasks/start.yml
index cbb577b0f..cda6c0cf3 100755
--- a/ansible/roles/haproxy/tasks/start.yml
+++ b/ansible/roles/haproxy/tasks/start.yml
@@ -1,6 +1,16 @@
---
- include: ../../start.yml
vars:
+ container_image: "{{ docker_keepalived_image_full }}"
+ container_name: "keepalived"
+ container_privileged: "True"
+ container_volumes:
+ - "{{ node_config_directory }}/keepalived/:/opt/kolla/keepalived/:ro"
+ container_environment:
+ KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
+
+- include: ../../start.yml
+ vars:
container_image: "{{ docker_haproxy_image_full }}"
container_name: "haproxy"
container_volumes:
diff --git a/ansible/roles/haproxy/templates/keepalived.conf.j2 b/ansible/roles/haproxy/templates/keepalived.conf.j2
new file mode 100644
index 000000000..05062e5bd
--- /dev/null
+++ b/ansible/roles/haproxy/templates/keepalived.conf.j2
@@ -0,0 +1,19 @@
+vrrp_script check_alive {
+ script "/check_alive.sh"
+ interval 2
+ weight -10
+}
+
+vrrp_instance Floating {
+ state MASTER
+ interface {{ api_interface }}
+ virtual_router_id 51
+ priority {{ groups['database'].index(inventory_hostname) }}
+ advert_int 1
+ virtual_ipaddress {
+ {{ kolla_internal_address }}
+ }
+ track_script {
+ check_alive
+ }
+}
diff --git a/docker/centos/binary/keepalived/Dockerfile b/docker/centos/binary/keepalived/Dockerfile
index f24954990..6aa0a4f10 100755
--- a/docker/centos/binary/keepalived/Dockerfile
+++ b/docker/centos/binary/keepalived/Dockerfile
@@ -8,6 +8,7 @@ RUN yum -y install \
&& yum clean all
COPY keepalived.conf /etc/keepalived/
-
COPY start.sh check_alive.sh /
+COPY config-internal.sh config-external.sh /opt/kolla/
+
CMD ["/start.sh"]
diff --git a/docker/centos/binary/keepalived/config-external.sh b/docker/centos/binary/keepalived/config-external.sh
new file mode 120000
index 000000000..08cebbe79
--- /dev/null
+++ b/docker/centos/binary/keepalived/config-external.sh
@@ -0,0 +1 @@
+../../../common/keepalived/config-external.sh \ No newline at end of file
diff --git a/docker/centos/binary/keepalived/config-internal.sh b/docker/centos/binary/keepalived/config-internal.sh
new file mode 120000
index 000000000..9e9437a00
--- /dev/null
+++ b/docker/centos/binary/keepalived/config-internal.sh
@@ -0,0 +1 @@
+../../../common/keepalived/config-internal.sh \ No newline at end of file
diff --git a/docker/common/keepalived/config-external.sh b/docker/common/keepalived/config-external.sh
new file mode 100755
index 000000000..cb69e1c8f
--- /dev/null
+++ b/docker/common/keepalived/config-external.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+SOURCE="/opt/kolla/keepalived/keepalived.conf"
+TARGET="/etc/keepalived/keepalived.conf"
+OWNER="root"
+
+if [[ -f "$SOURCE" ]]; then
+ rm $TARGET
+ cp $SOURCE $TARGET
+ chown ${OWNER}: $TARGET
+ chmod 0644 $TARGET
+fi
diff --git a/docker/common/keepalived/config-internal.sh b/docker/common/keepalived/config-internal.sh
new file mode 100755
index 000000000..3d182f635
--- /dev/null
+++ b/docker/common/keepalived/config-internal.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+. /opt/kolla/kolla-common.sh
+
+check_required_vars KEEPALIVED_HOST_PRIORITIES \
+ PUBLIC_INTERFACE \
+ PUBLIC_IP
+
+MY_HOSTNAME=`hostname`
+
+# here we unpack KEEPALIVED_HOST_PRIORITIES hostname:priority pairs and match
+# them with current hostname, if it's there
+for i in ${KEEPALIVED_HOST_PRIORITIES//,/ }; do
+ HOST_PRIORITY=(${i//:/ })
+ if [ "$MY_HOSTNAME" == "${HOST_PRIORITY[0]}" ]; then
+ KEEPALIVED_PRIORITY=${HOST_PRIORITY[1]}
+ fi
+done
+
+if [ -z "$KEEPALIVED_PRIORITY" ]; then
+ echo "ERROR: missing hostname in KEEPALIVED_HOST_PRIORITIES: $MY_HOSTNAME" >&2
+ exit 1
+fi
+
+sed -i '
+ s|@PUBLIC_INTERFACE@|'$PUBLIC_INTERFACE'|g
+ s|@PUBLIC_IP@|'$PUBLIC_IP'|g
+ s|@KEEPALIVED_PRIORITY@|'$KEEPALIVED_PRIORITY'|g
+' /etc/keepalived/keepalived.conf
+
+exec /usr/sbin/keepalived -nld -p /run/keepalived.pid
diff --git a/docker/common/keepalived/start.sh b/docker/common/keepalived/start.sh
index 3d182f635..64f47e295 100755
--- a/docker/common/keepalived/start.sh
+++ b/docker/common/keepalived/start.sh
@@ -1,31 +1,13 @@
#!/bin/bash
+set -o errexit
-. /opt/kolla/kolla-common.sh
+CMD="/usr/sbin/keepalived"
+ARGS="-nld -p /run/keepalived.pid"
-check_required_vars KEEPALIVED_HOST_PRIORITIES \
- PUBLIC_INTERFACE \
- PUBLIC_IP
+# Loading common functions.
+source /opt/kolla/kolla-common.sh
-MY_HOSTNAME=`hostname`
+# Config-internal script exec out of this function, it does not return here.
+set_configs
-# here we unpack KEEPALIVED_HOST_PRIORITIES hostname:priority pairs and match
-# them with current hostname, if it's there
-for i in ${KEEPALIVED_HOST_PRIORITIES//,/ }; do
- HOST_PRIORITY=(${i//:/ })
- if [ "$MY_HOSTNAME" == "${HOST_PRIORITY[0]}" ]; then
- KEEPALIVED_PRIORITY=${HOST_PRIORITY[1]}
- fi
-done
-
-if [ -z "$KEEPALIVED_PRIORITY" ]; then
- echo "ERROR: missing hostname in KEEPALIVED_HOST_PRIORITIES: $MY_HOSTNAME" >&2
- exit 1
-fi
-
-sed -i '
- s|@PUBLIC_INTERFACE@|'$PUBLIC_INTERFACE'|g
- s|@PUBLIC_IP@|'$PUBLIC_IP'|g
- s|@KEEPALIVED_PRIORITY@|'$KEEPALIVED_PRIORITY'|g
-' /etc/keepalived/keepalived.conf
-
-exec /usr/sbin/keepalived -nld -p /run/keepalived.pid
+exec $CMD $ARGS