96 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # -*- mode: ruby -*-
 | |
| # vi: set ft=ruby :
 | |
| 
 | |
| # Guess at a reasonable name for the VM based on the folder vagrant-spk is
 | |
| # run from.  The timestamp is there to avoid conflicts if you have multiple
 | |
| # folders with the same name.
 | |
| VM_NAME = File.basename(File.dirname(File.dirname(__FILE__))) + "_sandstorm_#{Time.now.utc.to_i}"
 | |
| 
 | |
| # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
 | |
| VAGRANTFILE_API_VERSION = "2"
 | |
| 
 | |
| Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
 | |
|   config.vm.box = "sandstorm/debian-jessie64"
 | |
| 
 | |
|   if Vagrant.has_plugin?("vagrant-vbguest") then
 | |
|     # vagrant-vbguest is a Vagrant plugin that upgrades
 | |
|     # the version of VirtualBox Guest Additions within each
 | |
|     # guest. If you have the vagrant-vbguest plugin, then it
 | |
|     # needs to know how to compile kernel modules, etc., and so
 | |
|     # we give it this hint about operating system type.
 | |
|     config.vm.guest = "debian"
 | |
|   end
 | |
| 
 | |
|   # We forward port 6080, the Sandstorm web port, so that developers can
 | |
|   # visit their sandstorm app from their browser as local.sandstorm.io:6080
 | |
|   # (aka 127.0.0.1:6080).
 | |
|   config.vm.network :forwarded_port, guest: 6080, host: 6080
 | |
| 
 | |
|   # Use a shell script to "provision" the box. This installs Sandstorm using
 | |
|   # the bundled installer.
 | |
|   config.vm.provision "shell", inline: "sudo bash /opt/app/.sandstorm/global-setup.sh", keep_color: true
 | |
|   # Then, do stack-specific and app-specific setup.
 | |
|   config.vm.provision "shell", inline: "sudo bash /opt/app/.sandstorm/setup.sh", keep_color: true
 | |
| 
 | |
|   # Shared folders are configured per-provider since vboxsf can't handle >4096 open files,
 | |
|   # NFS requires privilege escalation every time you bring a VM up,
 | |
|   # and 9p is only available on libvirt.
 | |
| 
 | |
|   # Calculate the number of CPUs and the amount of RAM the system has,
 | |
|   # in a platform-dependent way; further logic below.
 | |
|   cpus = nil
 | |
|   total_kB_ram = nil
 | |
| 
 | |
|   host = RbConfig::CONFIG['host_os']
 | |
|   if host =~ /darwin/
 | |
|     cpus = `sysctl -n hw.ncpu`.to_i
 | |
|     total_kB_ram =  `sysctl -n hw.memsize`.to_i / 1024
 | |
|   elsif host =~ /linux/
 | |
|     cpus = `nproc`.to_i
 | |
|     total_kB_ram = `grep MemTotal /proc/meminfo | awk '{print $2}'`.to_i
 | |
|   elsif host =~ /mingw/
 | |
|     # powershell may not be available on Windows XP and Vista, so wrap this in a rescue block
 | |
|     begin
 | |
|       cpus = `powershell -Command "(Get-WmiObject Win32_Processor -Property NumberOfLogicalProcessors | Select-Object -Property NumberOfLogicalProcessors | Measure-Object NumberOfLogicalProcessors -Sum).Sum"`.to_i
 | |
|       total_kB_ram = `powershell -Command "Get-CimInstance -class cim_physicalmemory | % $_.Capacity}"`.to_i / 1024
 | |
|     rescue
 | |
|     end
 | |
|   end
 | |
|   # Use the same number of CPUs within Vagrant as the system, with 1
 | |
|   # as a default.
 | |
|   #
 | |
|   # Use at least 512MB of RAM, and if the system has more than 2GB of
 | |
|   # RAM, use 1/4 of the system RAM. This seems a reasonable compromise
 | |
|   # between having the Vagrant guest operating system not run out of
 | |
|   # RAM entirely (which it basically would if we went much lower than
 | |
|   # 512MB) and also allowing it to use up a healthily large amount of
 | |
|   # RAM so it can run faster on systems that can afford it.
 | |
|   if cpus.nil? or cpus.zero?
 | |
|     cpus = 1
 | |
|   end
 | |
|   if total_kB_ram.nil? or total_kB_ram < 2048000
 | |
|     assign_ram_mb = 512
 | |
|   else
 | |
|     assign_ram_mb = (total_kB_ram / 1024 / 2)
 | |
|   end
 | |
|   # Actually apply these CPU/memory values to the providers.
 | |
|   config.vm.provider :virtualbox do |vb, override|
 | |
|     vb.cpus = cpus
 | |
|     vb.memory = assign_ram_mb
 | |
|     vb.name = VM_NAME
 | |
| 
 | |
|     override.vm.synced_folder "..", "/opt/app"
 | |
|     override.vm.synced_folder ENV["HOME"] + "/.sandstorm", "/host-dot-sandstorm"
 | |
|     override.vm.synced_folder "..", "/vagrant"
 | |
|   end
 | |
|   config.vm.provider :libvirt do |libvirt, override|
 | |
|     libvirt.cpus = cpus
 | |
|     libvirt.memory = assign_ram_mb
 | |
|     libvirt.default_prefix = VM_NAME
 | |
| 
 | |
|     override.vm.synced_folder "..", "/opt/app", type: "9p", accessmode: "passthrough"
 | |
|     override.vm.synced_folder ENV["HOME"] + "/.sandstorm", "/host-dot-sandstorm", type: "9p", accessmode: "passthrough"
 | |
|     override.vm.synced_folder "..", "/vagrant", type: "9p", accessmode: "passthrough"
 | |
|   end
 | |
| end
 |