100 lines
3.2 KiB
Ruby
100 lines
3.2 KiB
Ruby
# -*- mode: ruby -*-
|
|
# vi: set ft=ruby :
|
|
|
|
module OS
|
|
def OS.windows?
|
|
(/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
|
|
end
|
|
|
|
def OS.mac?
|
|
(/darwin/ =~ RUBY_PLATFORM) != nil
|
|
end
|
|
|
|
def OS.unix?
|
|
!OS.windows?
|
|
end
|
|
|
|
def OS.linux?
|
|
OS.unix? and not OS.mac?
|
|
end
|
|
end
|
|
|
|
ENV['VAGRANT_DEFAULT_PROVIDER'] ||= OS.mac? ? 'vmware_fusion' : "vmware_workstation"
|
|
|
|
fusion_path="/Applications/VMware Fusion.app/Contents/Library"
|
|
if File.directory?(fusion_path)
|
|
ENV['PATH'] = "#{fusion_path}:#{ENV['PATH']}"
|
|
end
|
|
|
|
appcatalyst_path="/opt/vmware/appcatalyst/libexec"
|
|
if File.directory?(appcatalyst_path)
|
|
ENV['PATH'] = "#{appcatalyst_path}:#{ENV['PATH']}"
|
|
end
|
|
|
|
# Hey Now! thanks StackOverflow: http://stackoverflow.com/a/28801317/1233435
|
|
req_plugins = %w(vagrant-triggers)
|
|
|
|
if OS.mac?
|
|
req_plugins << "vagrant-vmware-fusion" if File.directory?(fusion_path)
|
|
req_plugins << "vagrant-vmware-appcatalyst" if File.directory?(appcatalyst_path)
|
|
else
|
|
req_plugins << "vagrant-vmware-workstation"
|
|
end
|
|
|
|
# Cycle through the required plugins and install what's missing.
|
|
plugins_install = req_plugins.select { |plugin| !Vagrant.has_plugin? plugin }
|
|
licensed_plugins = plugins_install.select { |plugin| plugin =~ /vagrant-vmware-(?:fusion|workstation)$/ }
|
|
licensed_plugins.each do |plugin|
|
|
unless File.exist? "#{ENV["VAGRANT_VMWARE_LICENSE_FILE"]||"./#{plugin}.lic"}"
|
|
abort "Failed to configure license, you can configure the path with VAGRANT_VMWARE_LICENSE_FILE"
|
|
end
|
|
end
|
|
|
|
unless plugins_install.empty?
|
|
puts "Installing plugins: #{plugins_install.join(' ')}"
|
|
if system "vagrant plugin install #{plugins_install.join(' ')}"
|
|
exec "vagrant #{ARGV.join(' ')}"
|
|
else
|
|
abort 'Installation of one or more plugins has failed. Aborting.'
|
|
end
|
|
end
|
|
|
|
licensed_plugins.each do |plugin|
|
|
unless system "vagrant plugin license #{plugin} #{ENV["VAGRANT_VMWARE_LICENSE_FILE"]||"./#{plugin}.lic"}"
|
|
abort "Failed to configure license, you can configure the path with VAGRANT_VMWARE_LICENSE_FILE"
|
|
end
|
|
end
|
|
|
|
VAGRANTFILE_API_VERSION = '2'
|
|
|
|
# VM configuration, as we're compiling an OS from scratch, make sure the
|
|
# defaults are sensible.
|
|
vm_config = { ram: 2048, cpu: 2 }
|
|
|
|
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
|
# the photon-build-machine box is built using packer,
|
|
# see support/packer-templates/photon-build-machine.json
|
|
config.vm.box = 'vmware/photon-build-machine'
|
|
|
|
config.vm.box_check_update = false
|
|
|
|
%w(vmware_fusion vmware_workstation vmware_appcatalyst).each do |p|
|
|
config.vm.provider p do |v|
|
|
v.vmx['memsize'] = vm_config[:ram]
|
|
v.vmx['numvcpus'] = vm_config[:cpu]
|
|
v.vmx['ethernet0.virtualDev'] = 'vmxnet3'
|
|
v.vmx['vhv.enable'] = 'true'
|
|
end
|
|
end
|
|
|
|
# Sync the current folder as /workspaces/photon using rsync.
|
|
config.vm.synced_folder('.', '/workspaces/photon', type: 'rsync',
|
|
rsync__exclude: ['.git/', 'stage/']) # exclude .git and stage from sync.
|
|
|
|
# Share the host's source root directory to copy back the build artifacts
|
|
config.vm.synced_folder('.', '/workspaces/host_srcroot')
|
|
|
|
# Build a new ISO and cleanup the machine afterward
|
|
config.vm.provision('shell', path: 'support/vagrant/photon-build-machine-init.sh')
|
|
end
|