scottslowe-learning-tools/docker-swarm-etcd/Vagrantfile
Scott S. Lowe 4f0eb76317 Update Docker Swarm-etcd environment
Update the etcd-backed Docker Swarm environment with new methods/techniques learned in building the Vagrant environment. This involves changes to the external YAML file (renamed to "machines.yml") and the Vagrantfile. Only minor changes were made to the ERB template and the provisioning script (to eliminate a dependency on shared folders).

Signed-off-by: Scott S. Lowe <scott.lowe@scottlowe.org>
2016-10-20 16:18:13 -06:00

111 lines
3.9 KiB
Ruby

# -*- mode: ruby -*-
# vi: set ft=ruby :
# Specify minimum 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 machines.yml to provide correct IP addresses
machines = YAML.load_file(File.join(File.dirname(__FILE__), 'machines.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
# Build etcd override files from ERB template
etcd_initial_cluster = []
machines.each do |machine|
if machine['etcd'] == true
etcd_initial_cluster << "#{machine['name']}=http://#{machine['ip_addr']}:2380"
end
end
machines.each do |machine|
if machine['etcd'] == true
ip = machine['ip_addr']
target = File.join(File.dirname(__FILE__), "#{machine['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
machines.each do |machine|
# Configure the VMs per details in machines.yml
config.vm.define machine['name'] do |srv|
# Don't check for box updates
srv.vm.box_check_update = false
# Specify the hostname of the VM
srv.vm.hostname = machine['name']
# Specify the Vagrant box to use (use VMware box by default)
srv.vm.box = machine['box']['vmw']
# Configure default synced folder (disable by default)
if machine['sync_disabled'] != nil
srv.vm.synced_folder '.', '/vagrant', disabled: machine['sync_disabled']
else
srv.vm.synced_folder '.', '/vagrant', disabled: true
end #if machine['sync_disabled']
# Assign additional private network
if machine['ip_addr'] != nil
srv.vm.network 'private_network', ip: machine['ip_addr']
end # if machine['ip_addr']
# Configure CPU & RAM per settings in machines.yml (Fusion)
srv.vm.provider 'vmware_fusion' do |vmw|
vmw.vmx['memsize'] = machine['ram']
vmw.vmx['numvcpus'] = machine['vcpu']
if machine['nested'] == true
vmw.vmx['vhv.enable'] = 'TRUE'
end #if machine['nested']
end # srv.vm.provider 'vmware_fusion'
# Configure CPU & RAM per settings in machines.yml (VirtualBox)
srv.vm.provider 'virtualbox' do |vb, override|
vb.memory = machine['ram']
vb.cpus = machine['vcpu']
override.vm.box = machine['box']['vb']
end # srv.vm.provider 'virtualbox'
# Configure VMs based on CoreOS box
if srv.vm.box == 'coreos-stable'
# 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 # if srv.vm.box
# Configure VMs marked with etcd value of true
if machine['etcd'] == true
# Copy files into the VM
srv.vm.provision 'file', source: 'etcd.conf', destination: '/home/vagrant/etcd.conf'
srv.vm.provision 'file', source: "#{machine['name']}.defaults", destination: "/home/vagrant/#{machine['name']}.defaults"
# Run etcd provisioning script
srv.vm.provision 'shell', path: 'provision.sh', privileged: true
end # if srv.vm.box
end # config.vm.define
end # machines.each
end # Vagrant.configure