123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- #!/bin/bash
- set -e
- source /etc/terraform_environment
- SERVER_ARGS=""
- UI_DIR="null"
- HTTP_CLIENT_ADDR="127.0.0.1"
- echo "Installing Consul..."
- pushd /tmp
- wget https://dl.bintray.com/mitchellh/consul/0.4.1_linux_amd64.zip -O consul.zip
- unzip consul.zip >/dev/null
- chmod +x consul
- mv consul /usr/local/bin/consul
- mkdir -p /etc/consul.d
- mkdir -p /mnt/consul/data
- mkdir -p /etc/service
- rm /tmp/consul.zip
- popd
- if [[ "${ROLE}" == *consul-server* ]]; then
- echo "Configure as Consul Server..."
- SERVER_ARGS="-server -bootstrap-expect=3"
- else
- echo "Configure as Consul Client..."
- fi
- if [[ "${ROLE}" == *consul-ui* ]]; then
- echo "Installing Consul UI..."
- pushd /tmp
- wget https://dl.bintray.com/mitchellh/consul/0.4.1_web_ui.zip -O consul-ui.zip
- unzip consul-ui.zip >/dev/null
- mkdir -p /mnt/consul/ui
- mv dist/* /mnt/consul/ui/
- rm /tmp/consul-ui.zip
- popd
- HTTP_CLIENT_ADDR="0.0.0.0"
- UI_DIR="\"/mnt/consul/ui\""
- fi
- # Configuration file
- echo "Creating configuration..."
- cat >/etc/consul.d/config.json << EOF
- {
- "addresses" : {
- "http" : "${HTTP_CLIENT_ADDR}"
- },
- "ports" : {
- "dns" : 53
- },
- "recursor" : "10.0.0.2",
- "disable_anonymous_signature" : true,
- "disable_update_check" : true,
- "data_dir" : "/mnt/consul/data",
- "ui_dir" : $UI_DIR
- }
- EOF
- chmod 0644 /etc/consul.d/config.json
- # Setup the join address
- echo "Configure IPs..."
- cat >/etc/service/consul-join << EOF
- export CONSUL_JOIN="10.0.1.10 10.0.1.11 10.0.1.12"
- EOF
- chmod 0644 /etc/service/consul-join
- # Configure the server
- echo "Configure server..."
- cat >/etc/service/consul << EOF
- export CONSUL_FLAGS="${SERVER_ARGS}"
- EOF
- chmod 0644 /etc/service/consul
- # Add "first start" join service
- echo "Creating 'join' service..."
- cat >/etc/init/consul-join.conf <<"EOF"
- description "Join the consul cluster"
- start on started consul
- stop on stopped consul
- task
- script
- if [ -f "/etc/service/consul-join" ]; then
- . /etc/service/consul-join
- fi
- # Keep trying to join until it succeeds
- set +e
- while :; do
- logger -t "consul-join" "Attempting join: ${CONSUL_JOIN}"
- /usr/local/bin/consul join \
- ${CONSUL_JOIN} \
- >>/var/log/consul-join.log 2>&1
- [ $? -eq 0 ] && break
- sleep 5
- done
- logger -t "consul-join" "Join success!"
- end script
- EOF
- chmod 0644 /etc/init/consul-join.conf
- # Add actual service
- echo "Creating service..."
- cat >/etc/init/consul.conf <<"EOF"
- description "Consul agent"
- start on runlevel [2345]
- stop on runlevel [!2345]
- respawn
- script
- if [ -f "/etc/service/consul" ]; then
- . /etc/service/consul
- fi
- # Make sure to use all our CPUs, because Consul can block a scheduler thread
- export GOMAXPROCS=`nproc`
- exec /usr/local/bin/consul agent \
- -config-dir="/etc/consul.d" \
- ${CONSUL_FLAGS} \
- >>/var/log/consul.log 2>&1
- end script
- EOF
- chmod 0644 /etc/init/consul.conf
- # Start service
- echo "Starting service..."
- initctl start consul
|