mirror of
https://codeberg.org/scottslowe/learning-tools.git
synced 2026-03-11 09:04:37 +00:00
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>
111 lines
3.9 KiB
Ruby
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
|