diff --git a/image/Dockerfile b/image/Dockerfile index 07f9a1e..eddab4d 100644 --- a/image/Dockerfile +++ b/image/Dockerfile @@ -4,6 +4,7 @@ MAINTAINER Bertrand Gouny # This container need run options : # --privileged=true # --net=host +# -v /lib/modules:/lib/modules # Use baseimage-docker's init system. CMD ["/sbin/my_init"] diff --git a/image/env.yml b/image/env.yml index c0cafad..f0a51cd 100644 --- a/image/env.yml +++ b/image/env.yml @@ -1,10 +1,11 @@ +KEEPALIVED_INTERFACE: eno1 KEEPALIVED_PASSWORD: d0cker # for electing MASTER, highest priority wins. # to be MASTER, make 50 more than other machines KEEPALIVED_PRIORITY: 150 -KEEPALIVED_UNICAST_PEER: +KEEPALIVED_UNICAST_PEERS: - 172.17.8.101 - 172.17.8.102 - 172.17.8.103 diff --git a/image/service/keepalived/assets/keepalived.conf b/image/service/keepalived/assets/keepalived.conf index 65d53dd..3f76140 100644 --- a/image/service/keepalived/assets/keepalived.conf +++ b/image/service/keepalived/assets/keepalived.conf @@ -1,5 +1,5 @@ vrrp_instance VI_1 { - interface eno1 + interface {{ keepalived_interface }} state MASTER virtual_router_id 51 priority {{ keepalived_priority }} diff --git a/image/service/keepalived/container-start.sh b/image/service/keepalived/container-start.sh index 8a1c1c5..ccc6ec5 100755 --- a/image/service/keepalived/container-start.sh +++ b/image/service/keepalived/container-start.sh @@ -1,4 +1,4 @@ -#!/bin/bash -e +#!/bin/bash -ex FIRST_START_DONE="/etc/docker-keepalived-first-start-done" @@ -13,6 +13,43 @@ if [ ! -e "$FIRST_START_DONE" ]; then exit 1 else ln -s /osixia/keepalived/keepalived.conf /etc/keepalived/keepalived.conf + + # + # bootstrap config + # + sed -i "s|{{ keepalived_interface }}|$KEEPALIVED_INTERFACE|g" /etc/keepalived/keepalived.conf + sed -i "s|{{ keepalived_priority }}|$KEEPALIVED_PRIORITY|g" /etc/keepalived/keepalived.conf + sed -i "s|{{ keepalived_password }}|$KEEPALIVED_PASSWORD|g" /etc/keepalived/keepalived.conf + + # unicast peers + KEEPALIVED_UNICAST_PEERS=($KEEPALIVED_UNICAST_PEERS) + for peer in "${KEEPALIVED_UNICAST_PEERS[@]}" + do + # it's just a peer + # stored in a variable + if [ -n "${!peer}" ]; then + sed -i "s|{{ peer_ip }}|${!peer}\n {{ peer_ip }}|g" /etc/keepalived/keepalived.conf + # directly + else + sed -i "s|{{ peer_ip }}|${peer}\n {{ peer_ip }}|g" /etc/keepalived/keepalived.conf + fi + done + sed -i "/{{ peer_ip }}/d" /etc/keepalived/keepalived.conf + + # virtual ips + KEEPALIVED_VIRTUAL_IPS=($KEEPALIVED_VIRTUAL_IPS) + for vip in "${KEEPALIVED_VIRTUAL_IPS[@]}" + do + # it's just a peer + # stored in a variable + if [ -n "${!vip}" ]; then + sed -i "s|{{ floating_ip }}|${!vip}\n {{ floating_ip }}|g" /etc/keepalived/keepalived.conf + # directly + else + sed -i "s|{{ floating_ip }}|${vip}\n {{ floating_ip }}|g" /etc/keepalived/keepalived.conf + fi + done + sed -i "/{{ floating_ip }}/d" /etc/keepalived/keepalived.conf fi fi diff --git a/pop b/pop new file mode 100644 index 0000000..e69de29