#!/usr/bin/env bash # Copyright (c) HashiCorp, Inc. # SPDX-License-Identifier: BUSL-1.1 set -e CONFIGDIR=/ops/shared/config CONSULCONFIGDIR=/etc/consul.d NOMADCONFIGDIR=/etc/nomad.d CONSULTEMPLATECONFIGDIR=/etc/consul-template.d HOME_DIR=ubuntu # Wait for network sleep 15 DOCKER_BRIDGE_IP_ADDRESS=(`ifconfig docker0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'`) CLOUD=$1 RETRY_JOIN=$2 NOMAD_BINARY=$3 # Get IP from metadata service if [ "$CLOUD" = "gce" ]; then IP_ADDRESS=$(curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/network-interfaces/0/ip) else IP_ADDRESS=$(curl http://instance-data/latest/meta-data/local-ipv4) fi # Systemd-resolved config to enable .consul domain lookups using the local Consul agent # https://developer.hashicorp.com/consul/tutorials/networking/dns-forwarding#systemd-resolved-setup mkdir -p /etc/systemd/resolved.conf.d/ cat < /etc/systemd/resolved.conf.d/consul.conf [Resolve] DNS=127.0.0.1:8600 DNSSEC=false Domains=~consul EOT systemctl restart systemd-resolved.service # Consul sed -i "s/IP_ADDRESS/$IP_ADDRESS/g" $CONFIGDIR/consul_client.hcl sed -i "s/RETRY_JOIN/$RETRY_JOIN/g" $CONFIGDIR/consul_client.hcl sudo cp $CONFIGDIR/consul_client.hcl $CONSULCONFIGDIR/consul.hcl sudo systemctl enable consul.service --now sleep 10 # Nomad ## Install CNI binaries curl -L -o cni-plugins.tgz "https://github.com/containernetworking/plugins/releases/download/v1.0.0/cni-plugins-linux-$( [ $(uname -m) = aarch64 ] && echo arm64 || echo amd64)"-v1.0.0.tgz && \ sudo mkdir -p /opt/cni/bin && \ sudo tar -C /opt/cni/bin -xzf cni-plugins.tgz ## Replace existing Nomad binary if remote file exists if [[ `wget -S --spider $NOMAD_BINARY 2>&1 | grep 'HTTP/1.1 200 OK'` ]]; then curl -L $NOMAD_BINARY > nomad.zip sudo unzip -o nomad.zip -d /usr/bin sudo chmod 0755 /usr/bin/nomad sudo chown root:root /usr/bin/nomad fi sudo cp $CONFIGDIR/nomad_client.hcl $NOMADCONFIGDIR/nomad.hcl sudo systemctl enable nomad.service --now sleep 10 export NOMAD_ADDR=http://$IP_ADDRESS:4646 # Consul Template sudo cp $CONFIGDIR/consul-template.hcl $CONSULTEMPLATECONFIGDIR/consul-template.hcl sudo cp $CONFIGDIR/consul-template.service /etc/systemd/system/consul-template.service # Add hostname to /etc/hosts echo "127.0.0.1 $(hostname)" | sudo tee --append /etc/hosts # Add Docker bridge network IP to /etc/resolv.conf (at the top) echo "nameserver $DOCKER_BRIDGE_IP_ADDRESS" | sudo tee /etc/resolv.conf.new cat /etc/resolv.conf | sudo tee --append /etc/resolv.conf.new sudo mv /etc/resolv.conf.new /etc/resolv.conf # Move examples directory to $HOME sudo mv /ops/examples /home/$HOME_DIR sudo chown -R $HOME_DIR:$HOME_DIR /home/$HOME_DIR/examples sudo chmod -R 775 /home/$HOME_DIR/examples # Set env vars for tool CLIs echo "export VAULT_ADDR=http://$IP_ADDRESS:8200" | sudo tee --append /home/$HOME_DIR/.bashrc echo "export NOMAD_ADDR=http://$IP_ADDRESS:4646" | sudo tee --append /home/$HOME_DIR/.bashrc echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre" | sudo tee --append /home/$HOME_DIR/.bashrc