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