# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
# ---- Define number of nodes to spin up ----
N = 3
# ---- Define any custom memory/cpu requirement ----
# if custom requirements are desired...ensure to set
# custom_cpu_mem == true otherwise set to false
# By default if custom requirements are defined and set below
# any node not defined will be configured as the default...
# which is 1vCPU/512mb...So if setting custom requirements
# only define any node which requires more than the defaults.
nodes = [
{
:node => "node0",
:box => "mrlesmithjr/trusty64",
:cpu => 1,
:mem => 1024
}
]
# ---- Define variables below ----
#Define if additional disks should be added (true|false)
additional_disks = false
additional_disks_controller = "SATA Controller"
#Define the number of additional disks to add
additional_disks_num = 1
#Define disk size in GB
additional_disks_size = 10
#Define if additional network adapters should be created (true|false)
additional_nics = true
#Define if add'l network adapters are auto configured addresses (true|false)
additional_nics_auto_config = true
#Define if additional network adapters should be DHCP assigned (true|false)
additional_nics_dhcp = false
#Define the number of additional nics to add
additional_nics_num = 1
ansible_groups = {
"test-nodes" => ["node[0:#{N-1}]"]
}
#Define Vagrant box to load
box = "ubuntu/trusty64"
#Define if custom cpu and memory requirements are needed (true|false)
#defined within nodes variable above
custom_cpu_mem = false
#Define if running desktop OS (true|false)
desktop = false
#Define if custom boxes should be used...defined in nodes var..
enable_custom_boxes = false
#Define if port forwards should be enabled (true|false)
enable_port_forwards = false
#Defines if nodes should be linked from master VM (true|false)
linked_clones = false
port_forwards = [
{
:node => "node0",
:guest => 3306,
:host => 3306
},
{
:node => "node0",
:guest => 80,
:host => 8080
},
{
:node => "node0",
:guest => 8000,
:host => 8000
}
]
#Define if provisioners should run (true|false)
provision_nodes = true
#Define if IP's are random assigned if not DHCP (true|false)
random_ips = false
#Define number of CPU cores
#will be ignored if custom_cpu_mem == true
server_cpus = 1
#Define amount of memory to assign to node(s)
#will be ignored if custom_cpu_mem == true
server_memory = 512
#Define subnet for private_network (If not using DHCP)
subnet = "192.168.202."
#Define starting last octet of the subnet range to begin addresses for node(s)
subnet_ip_start = 200
Vagrant.configure(2) do |config|
#Iterate over nodes
(1..N).each do |node_id|
nid = (node_id - 1)
config.vm.define "node#{nid}" do |node|
if enable_custom_boxes
#Initially no so it can be set to yes if found in custom box defined
box_set = "no"
nodes.each do |cust_box|
if cust_box[:node] == "node#{nid}"
node.vm.box = cust_box[:box]
box_set = "yes"
end
end
if box_set == "no"
node.vm.box = box
end
end
if not enable_custom_boxes
node.vm.box = box
end
node.vm.provider "virtualbox" do |vb|
if linked_clones
vb.linked_clone = true
end
if not custom_cpu_mem
vb.customize ["modifyvm", :id, "--cpus", server_cpus]
vb.customize ["modifyvm", :id, "--memory", server_memory]
end
if custom_cpu_mem
nodes.each do |cust_node|
if cust_node[:node] == "node#{nid}"
vb.customize ["modifyvm", :id, "--cpus", cust_node[:cpu]]
vb.customize ["modifyvm", :id, "--memory", cust_node[:mem]]
end
end
end
# Setup desktop environment
if desktop
vb.gui = true
vb.customize ["modifyvm", :id, "--graphicscontroller", "vboxvga"]
vb.customize ["modifyvm", :id, "--accelerate3d", "on"]
vb.customize ["modifyvm", :id, "--ioapic", "on"]
vb.customize ["modifyvm", :id, "--vram", "128"]
vb.customize ["modifyvm", :id, "--hwvirtex", "on"]
end
# Add additional disks
if additional_disks
(1..additional_disks_num).each do |disk_num|
dnum = (disk_num + 1)
ddev = ("node#{nid}_Disk#{dnum}.vdi")
unless File.exist?("#{ddev}")
vb.customize ['createhd', '--filename', ("#{ddev}"), \
'--variant', 'Fixed', '--size', additional_disks_size * 1024]
end
vb.customize ['storageattach', :id, '--storagectl', \
"#{additional_disks_controller}", '--port', dnum, '--device', 0, \
'--type', 'hdd', '--medium', "node#{nid}_Disk#{dnum}.vdi"]
end
end
end
node.vm.hostname = "node#{nid}"
# Define additional network adapters below
if additional_nics
if not additional_nics_dhcp
(1..additional_nics_num).each do |nic_num|
if random_ips
nnum = Random.rand(0..50)
if additional_nics_auto_config
node.vm.network :private_network, \
ip: subnet+"#{subnet_ip_start + nid + nnum}"
end
if not additional_nics_auto_config
node.vm.network :private_network, \
ip: subnet+"#{subnet_ip_start + nid + nnum}",
auto_config: false
end
end
if not random_ips
if additional_nics_auto_config
node.vm.network :private_network, \
ip: subnet+"#{subnet_ip_start + nid}"
end
if not additional_nics_auto_config
node.vm.network :private_network, \
ip: subnet+"#{subnet_ip_start + nid}",
auto_config: false
end
end
end
end
if additional_nics_dhcp
(1..additional_nics_num).each do |nic_num|
node.vm.network :private_network, type: "dhcp"
end
end
end
# Define port forwards below
if enable_port_forwards
port_forwards.each do |pf|
if pf[:node] == "node#{nid}"
node.vm.network :forwarded_port, guest: pf[:guest], \
host: pf[:host]
end
end
end
# Provisioners
if provision_nodes
if node_id == N
node.vm.provision "ansible" do |ansible|
ansible.limit = "all"
#runs bootstrap Ansible playbook
ansible.playbook = "bootstrap.yml"
end
node.vm.provision "ansible" do |ansible|
ansible.limit = "all"
#runs Ansible playbook for installing roles/executing tasks
ansible.playbook = "playbook.yml"
ansible.groups = ansible_groups
end
end
end
end
end
if provision_nodes
#runs initial shell script
config.vm.provision :shell, path: "bootstrap.sh", keep_color: "true"
end
end