Created
January 3, 2018 03:19
-
-
Save xuanyu-h/6c4f1f923a1c5b62a6c791094ff1a9b8 to your computer and use it in GitHub Desktop.
Vagrantfile
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- mode: ruby -*- | |
# vi: set ft=ruby : | |
BOX_NAME = ENV['BOX_NAME'] || "centos/7" | |
VAGRANTFILE_API_VERSION = "2" | |
CONSUL_ENCRYPT = "eEZJ2MTe0keJc2EkvZ+l3Q==" | |
CONSUL_DATACENTER = "nyc" | |
CONSUL_DATA_DIR = "/var/consul" | |
CONSUL_NODE_IP = { | |
node1: "172.20.20.2", | |
node2: "172.20.20.3", | |
node3: "172.20.20.4", | |
node4: "172.20.20.5", | |
node5: "172.20.20.6", | |
} | |
CONSUL_NODE_HOSTS = <<HOSTS | |
172.20.20.2 node1 | |
172.20.20.3 node2 | |
172.20.20.4 node3 | |
172.20.20.5 node4 | |
172.20.20.6 node5 | |
HOSTS | |
def consul_config(bind_addr, bootstrap = false, server = false, ui = false) | |
config =<<-EOF | |
{ | |
"bootstrap": #{bootstrap}, | |
"server": #{server}, | |
"ui": #{ui}, | |
"datacenter": "#{CONSUL_DATACENTER}", | |
"data_dir": "#{CONSUL_DATA_DIR}", | |
"encrypt": "#{CONSUL_ENCRYPT}", | |
"log_level": "INFO", | |
"enable_syslog": true, | |
"enable_script_checks": true, | |
"bind_addr": "#{bind_addr}", | |
"client_addr": "0.0.0.0" | |
} | |
EOF | |
config | |
end | |
$init_script = <<SCRIPT | |
echo "Installing Consul ..." | |
if [ -f /vagrant/consul_0.9.0_linux_amd64 ]; then | |
echo "Find consul" | |
cp /vagrant/consul_0.9.0_linux_amd64 /tmp/consul | |
else | |
echo "Can not find Consul" | |
exit 1 | |
fi | |
if [ -f /vagrant/consul-manager.sh ]; then | |
echo "Find Consul Manager" | |
cp /vagrant/consul-manager.sh /usr/bin/consul-manager | |
else | |
echo "Can not find Consul Manager" | |
exit 1 | |
fi | |
sudo chmod a+rwx /usr/bin/consul-manager | |
cd /tmp | |
sudo chmod +x consul | |
sudo mv consul /usr/bin/consul | |
echo "Configuring consul" | |
sudo mkdir /etc/consul.d | |
sudo chmod a+w /etc/consul.d | |
sudo mkdir /var/consul | |
sudo adduser consul | |
sudo chown -R consul:consul /etc/consul.d | |
sudo chown -R consul:consul /var/consul | |
echo "Add Hosts" | |
echo "#{CONSUL_NODE_HOSTS}" >> /etc/hosts | |
SCRIPT | |
$script_node1 = <<SCRIPT | |
sudo su consul | |
echo '#{consul_config(CONSUL_NODE_IP[:node1], true, true, true)}' \ | |
> /etc/consul.d/config.json | |
sudo consul-manager start | |
SCRIPT | |
$script_node2 = <<SCRIPT | |
sudo su consul | |
echo '#{consul_config(CONSUL_NODE_IP[:node2], false, true)}' \ | |
> /etc/consul.d/config.json | |
sudo consul-manager start | |
SCRIPT | |
$script_node3 = <<SCRIPT | |
sudo su consul | |
echo '#{consul_config(CONSUL_NODE_IP[:node3], false, true)}' \ | |
> /etc/consul.d/config.json | |
sudo consul-manager start | |
SCRIPT | |
$script_node4 = <<SCRIPT | |
sudo su consul | |
echo '#{consul_config(CONSUL_NODE_IP[:node4])}' \ | |
> /etc/consul.d/config.json | |
sudo consul-manager start | |
SCRIPT | |
$script_node5 = <<SCRIPT | |
sudo su consul | |
echo '#{consul_config(CONSUL_NODE_IP[:node5])}' \ | |
> /etc/consul.d/config.json | |
sudo consul-manager start | |
SCRIPT | |
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| | |
config.vm.box = BOX_NAME | |
config.vm.provision "shell", inline: $init_script | |
config.vm.define "node1" do |n| | |
n.vm.provision "shell", inline: $script_node1 | |
n.vm.hostname = "node1" | |
n.vm.network "private_network", ip: CONSUL_NODE_IP[:node1] | |
n.vm.network "forwarded_port", guest: 8500, host: 8500, protocol: "tcp" | |
end | |
config.vm.define "node2" do |n| | |
n.vm.provision "shell", inline: $script_node2 | |
n.vm.hostname = "node2" | |
n.vm.network "private_network", ip: CONSUL_NODE_IP[:node2] | |
end | |
config.vm.define "node3" do |n| | |
n.vm.provision "shell", inline: $script_node3 | |
n.vm.hostname = "node3" | |
n.vm.network "private_network", ip: CONSUL_NODE_IP[:node3] | |
end | |
config.vm.define "node4" do |n| | |
n.vm.provision "shell", inline: $script_node4 | |
n.vm.hostname = "node4" | |
n.vm.network "private_network", ip: CONSUL_NODE_IP[:node4] | |
end | |
config.vm.define "node5" do |n| | |
n.vm.provision "shell", inline: $script_node5 | |
n.vm.hostname = "node5" | |
n.vm.network "private_network", ip: CONSUL_NODE_IP[:node5] | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment