scottslowe-learning-tools/ipvs-docker/Vagrantfile
Scott S. Lowe b4ba9dfcb1 Add files for using IPVS with Docker
Add Vagrantfile, shell provisioning script, Vagrant data file, and README.md for using IPVS to load balance Docker containers.
2016-06-20 21:47:06 -06:00

74 lines
2.5 KiB
Ruby

# -*- mode: ruby -*-
# vi: set ft=ruby :
# Specify Vagrant version, Vagrant API version, and desired clone location
Vagrant.require_version '>= 1.6.0'
VAGRANTFILE_API_VERSION = '2'
ENV['VAGRANT_VMWARE_CLONE_DIRECTORY'] = '~/.vagrant'
# Require 'yaml' module
require 'yaml'
# Read YAML file with VM details (box, CPU, RAM, IP addresses)
machines = YAML.load_file(File.join(File.dirname(__FILE__), 'machines.yml'))
# 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|
config.vm.define machine['name'] do |srv|
# Don't check for box updates
srv.vm.box_check_update = false
srv.vm.hostname = machine['name']
# Use VMware box by default (override later for VirtualBox)
srv.vm.box = machine['vmw_box']
# 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['vb_box']
end # srv.vm.provider virtualbox
# Provision Docker on appropriate VMs
if machine['docker'] == true
srv.vm.provision 'docker', images: ['nginx:latest']
srv.vm.provision 'shell',
inline: 'iptables -t nat -A PREROUTING -d 192.168.100.10 -j REDIRECT',
privileged: true
end # if machine['docker']
# Provision LVS VM
if machine['name'] == 'lvs-01'
srv.vm.provision 'shell', path: 'provision.sh', privileged: true
end # if machine['name']
end # config.vm.define
end # machines.each
end # Vagrant.configure