scottslowe-learning-tools/docker-swarm-etcd/Vagrantfile
Scott Lowe 1816354698 Fix scoping of ERB template to prevent etcd errors
Modify Vagrantfile and servers.yml to create mechanism for properly
limiting results placed into the override files generated from the
ERB template. This prevents non-etcd systems from being listed as
part of the etcd cluster, which would otherwise cause etcd to fail.
2015-04-16 23:07:38 -06:00

78 lines
No EOL
2.9 KiB
Ruby

# -*- mode: ruby -*-
# vi: set ft=ruby :
# Specify Vagrant version and Vagrant API version
Vagrant.require_version ">= 1.6.0"
VAGRANTFILE_API_VERSION = "2"
# Require 'yaml', 'fileutils', and 'erb' modules
require 'yaml'
require 'fileutils'
require 'erb'
# Look for user-data file to configure/customize CoreOS boxes
# No changes should need to be made to this file
USER_DATA = File.join(File.dirname(__FILE__), "user-data")
# Read YAML file with VM details (box, CPU, RAM, IP addresses)
# Be sure to edit servers.yml to provide correct IP addresses
servers = YAML.load_file('servers.yml')
# Use config from YAML file to write out templates for etcd overrides
template = File.join(File.dirname(__FILE__), 'etcd.defaults.erb')
content = ERB.new File.new(template).read
etcd_initial_cluster = []
servers.each do |servers|
if servers["etcd"] == "active"
etcd_initial_cluster << "#{servers['name']}=http://#{servers['priv_ip']}:2380"
end
end
servers.each do |servers|
if servers["etcd"] == "active"
ip = servers['priv_ip']
target = File.join(File.dirname(__FILE__), "#{servers['name']}.defaults")
File.open(target, 'w') { |f| f.write(content.result(binding)) }
end
end
# Create and configure the VMs
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Always use Vagrant's default insecure key
config.ssh.insert_key = false
# Iterate through entries in YAML file to create VMs
servers.each do |servers|
config.vm.define servers["name"] do |srv|
# Don't check for box updates
srv.vm.box_check_update = false
srv.vm.hostname = servers["name"]
srv.vm.box = servers["box"]
# Assign an additional static private network
srv.vm.network "private_network", ip: servers["priv_ip"]
# Configure VMs based on CoreOS box
if srv.vm.box == "coreos-stable"
# Disable default synced folder for CoreOS VMs
srv.vm.synced_folder ".", "/vagrant", disabled: true
# Copy user_data file into CoreOS VM
srv.vm.provision "file", source: "#{USER_DATA}", destination: "/tmp/vagrantfile-user-data"
# Move user_data to correct location to be processed by cloud-init
srv.vm.provision "shell", inline: "mv /tmp/vagrantfile-user-data /var/lib/coreos-vagrant/", privileged: true
end
# Configure VMs based on Ubuntu box
if srv.vm.box == "slowe/ubuntu-trusty-x64"
# Enable default synced folder (needed for provisioning)
srv.vm.synced_folder ".", "/vagrant"
# Run final provisioning script
# Note that default shared folder is needed for script to work
srv.vm.provision "shell", path: "provision.sh", privileged: true
end
# Configure VMs with RAM and CPUs per settings in servers.yml
srv.vm.provider :vmware_fusion do |vmw|
vmw.vmx["memsize"] = servers["ram"]
vmw.vmx["numvcpus"] = servers["vcpu"]
end
end
end
end