Skip to content

Instantly share code, notes, and snippets.

@torian
Last active March 14, 2017 22:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save torian/9aaad52f432ddc325b19cd1db54bdca6 to your computer and use it in GitHub Desktop.
Save torian/9aaad52f432ddc325b19cd1db54bdca6 to your computer and use it in GitHub Desktop.
# vi:ts=2:sw=2:et:ft=ruby
VAGRANTFILE_API_VERSION = "2"
# << Consul
#
consul_version = '0.7.0'
$consul_script = <<SCRIPT
echo Installing dependencies...
sudo apt-get update
sudo apt-get install -y unzip curl vim screen
sudo rm -rf /var/consul
echo Fetching Consul...
cd /tmp/
[ ! -f consul.zip ] && \
curl -s https://releases.hashicorp.com/consul/#{consul_version}/consul_#{consul_version}_linux_amd64.zip -o consul.zip
[ ! -f /usr/bin/consul ] && \
echo Installing Consul... && \
unzip consul.zip && \
sudo chmod +x consul && \
sudo mv consul /usr/bin/consul
[ ! -f consul-ui.zip ] && \
curl -s https://releases.hashicorp.com/consul/#{consul_version}/consul_#{consul_version}_web_ui.zip -o consul-ui.zip
[ ! -f /opt/consul-ui/index.html ] && \
sudo mkdir -p /opt/consul-ui && \
sudo unzip -d /opt/consul-ui consul-ui.zip
sudo mkdir -p /etc/consul.d /var/consul
sudo chmod a+w /etc/consul.d
SCRIPT
$consul_srv = <<CONFIG
PUBIP=$(/sbin/ip addr show dev eth1 | awk '/inet / { gsub(/\/24/, "", $2) ; print $2 }')
cat <<EOF > /etc/consul.d/server.json
{
"bind_addr": "$1",
$([ "${2:-0}" == 1 ] && echo '"ui_dir": "/opt/consul-ui",' || :)
$([ "${2:-0}" == 1 ] && echo '"addresses" : { "http": "0.0.0.0" },' || :)
"domain": "test",
"datacenter": "vagrant",
"data_dir": "/var/consul",
"encrypt": "EXz7LFN8hpQ4id8EDYiFoQ==",
"log_level": "INFO",
"enable_syslog": true,
"enable_debug": true,
"server": true,
"bootstrap_expect": 3,
"leave_on_terminate": false,
"skip_leave_on_interrupt": true,
"rejoin_after_leave": true,
"retry_join": [
"172.23.20.10:8301",
"172.23.20.11:8301",
"172.23.20.12:8301"
]
}
EOF
CONFIG
# << Nomad
#
nomad_version = '0.4.1'
$nomad_script = <<SCRIPT
echo Fetching Nomad...
cd /tmp/
[ ! -f nomad.zip ] && \
curl -s https://releases.hashicorp.com/nomad/#{nomad_version}/nomad_#{nomad_version}_linux_amd64.zip -o nomad.zip
[ ! -f /usr/bin/nomad ] && \
echo Installing Nomad... && \
unzip nomad.zip && \
sudo chmod +x nomad && \
sudo mv nomad /usr/bin/nomad
sudo mkdir -p /etc/nomad.d /var/nomad
sudo chmod a+w /etc/nomad.d
SCRIPT
#bind_addr = "$(ip addr show dev eth1 | awk '/inet /{ print gensub(/\/24$/, '', 'g', $2) }')"
$nomad_srv = <<CONFIG
cat <<EOF > /etc/nomad.d/nomad.hcl
bind_addr = "${1}"
# Increase log verbosity
log_level = "DEBUG"
# Setup data dir
data_dir = "/var/nomad"
# Enable the server
server {
enabled = true
bootstrap_expect = 3
}
consul {
server_auto_join = true
}
EOF
CONFIG
# << Vault
#
vault_version = '0.6.2'
$vault_script = <<SCRIPT
echo Fetching Vault...
cd /tmp/
[ ! -f vault.zip ] && \
curl -s https://releases.hashicorp.com/vault/#{vault_version}/vault_{vault_version}_linux_amd64.zip -o vault.zip
[ ! -f /usr/bin/vault ] && \
echo Installing Vault... && \
unzip vault.zip && \
sudo chmod +x vault && \
sudo mv vault /usr/bin/vault
sudo mkdir -p /etc/vault.d /var/vault
sudo chmod a+w /etc/vault.d
SCRIPT
$vault_srv = <<CONFIG
cat <<EOF > /etc/vault.d/vault.hcl
backend "consul" {
address = "127.0.0.1:8500"
path = "vault"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = 1
}
#telemetry {
# statsite_address = "0.0.0.0:8125"
# disable_hostname = true
#}
EOF
CONFIG
##
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "debian/wheezy64"
config.vm.provision "shell", inline: $consul_script
config.vm.provision "shell", inline: $nomad_script
config.vm.provision "shell", inline: $vault_script
config.vm.define "n1" do |n1|
ip = "172.23.20.10"
n1.vm.hostname = "n1"
n1.vm.network "private_network", ip: "#{ip}"
n1.vm.network 'forwarded_port', guest: 8500, host: 8500
n1.vm.provision "shell", inline: $consul_srv, :args => [ "#{ip}", 1 ]
n1.vm.provision "shell", inline: "screen -S consul -dm sudo consul agent -config-dir /etc/consul.d"
n1.vm.provision "shell", inline: $nomad_srv, :args => [ "#{ip}", 1 ]
n1.vm.provision "shell", inline: "screen -S nomad -dm sudo nomad agent -config /etc/nomad.d/nomad.hcl"
# Setup vault server
n1.vm.provision "shell", inline: $vault_srv
n1.vm.provision "shell", inline: "screen -S vault -dm sudo vault server -dev -config /etc/vault.d/vault.hcl || sudo vault server -config /etc/vault.d/vault.hcl"
end
config.vm.define "n2" do |n2|
ip = "172.23.20.11"
n2.vm.hostname = "n2"
n2.vm.network "private_network", ip: "#{ip}"
n2.vm.network 'forwarded_port', guest: 8500, host: 8501
n2.vm.provision "shell", inline: $consul_srv, :args => "#{ip}"
n2.vm.provision "shell", inline: "screen -S consul -dm sudo consul agent -config-dir /etc/consul.d"
n2.vm.provision "shell", inline: $nomad_srv, :args => [ "#{ip}", 1 ]
n2.vm.provision "shell", inline: "screen -S nomad -dm sudo nomad agent -config /etc/nomad.d/nomad.hcl"
end
config.vm.define "n3" do |n3|
ip = "172.23.20.12"
n3.vm.hostname = "n3"
n3.vm.network "private_network", ip: "#{ip}"
n3.vm.network 'forwarded_port', guest: 8500, host: 8502
n3.vm.provision "shell", inline: $consul_srv, :args => "#{ip}"
n3.vm.provision "shell", inline: "screen -S consul -dm sudo consul agent -config-dir /etc/consul.d"
n3.vm.provision "shell", inline: $nomad_srv, :args => [ "#{ip}", 1 ]
n3.vm.provision "shell", inline: "screen -S nomad -dm sudo nomad agent -config /etc/nomad.d/nomad.hcl"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment