docker-keepalived/image/service/keepalived/container-start.sh

60 lines
2.0 KiB
Bash
Executable File

#!/bin/bash -ex
FIRST_START_DONE="/etc/docker-keepalived-first-start-done"
# container first start
if [ ! -e "$FIRST_START_DONE" ]; then
# config folder is empty use bootstrap config if available
if [ ! -e /etc/keepalived/keepalived.conf ]; then
echo "No keepalived.conf provided using image default one"
if [ ! -e /osixia/keepalived/keepalived.conf ]; then
echo "Error: No default keepalived.conf found in /osixia/keepalived/keepalived.conf"
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
touch $FIRST_START_DONE
fi
exit 0