--- /dev/null
+# -*- 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