aboutsummaryrefslogblamecommitdiffhomepage
path: root/Vagrant/Vagrantfile
blob: bca571814e60976a14fb05c561926b7837765966 (plain) (tree)



































































































































































































































                                                                                
# -*- 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