mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-07 01:54:27 +00:00
203 lines
7.4 KiB
Ruby
203 lines
7.4 KiB
Ruby
Vagrant.require_version ">= 1.5"
|
|
require 'json'
|
|
|
|
# Check to determine whether we're on a windows or linux/os-x host,
|
|
# later on we use this to launch ansible in the supported way
|
|
# source: https://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
|
|
def which(cmd)
|
|
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
|
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
|
exts.each { |ext|
|
|
exe = File.join(path, "#{cmd}#{ext}")
|
|
return exe if File.executable? exe
|
|
}
|
|
end
|
|
return nil
|
|
end
|
|
|
|
if which('ip')
|
|
$env = "mac"
|
|
else if which('ifconfig')
|
|
$env = "linux"
|
|
else
|
|
$env = "windows"
|
|
end
|
|
end
|
|
|
|
unless Vagrant.has_plugin?('vagrant-hostmanager')
|
|
raise "vagrant-hostmanager is not installed! Please run\n vagrant plugin install vagrant-hostmanager\n\n"
|
|
end
|
|
|
|
# Check to determine if box_meta JSON is present
|
|
# if provisionned : pick name of box
|
|
if File.file?(".vagrant/machines/default/virtualbox/box_meta")
|
|
data = File.read(".vagrant/machines/default/virtualbox/box_meta")
|
|
parsed_json = JSON.parse(data)
|
|
$box = parsed_json["name"]
|
|
end
|
|
|
|
# if not : run prompt to configure provisioning
|
|
if !File.file?(".vagrant/machines/default/virtualbox/box_meta") && ARGV[0] == 'up'
|
|
print "\033[34m \nChoose a Build type :\n\n(1) Use prebuilt Phraseanet Box\n(2) Build Phraseanet from scratch (xenial)\n\033[00m"
|
|
type = STDIN.gets.chomp
|
|
print "\n"
|
|
# Switch between Phraseanet box and native trusty64
|
|
case (type)
|
|
when '1'
|
|
$box = "alchemy/Phraseanet-vagrant-dev_php"
|
|
$playbook = "resources/ansible/playbook-boxes.yml"
|
|
when '2'
|
|
$box = "ubuntu/xenial64"
|
|
$playbook = "resources/ansible/playbook.yml"
|
|
else
|
|
raise "\033[31mYou should specify Build type before running vagrant\n\n (Available : 1, 2)\n\n\033[00m"
|
|
end
|
|
print "\033[32m-----------------------------------------------\n"
|
|
print "Build with "+$box+" box\n"
|
|
print "-----------------------------------------------\n\n\033[00m"
|
|
|
|
print "\033[34mChoose a PHP version for your build (Available : 5.6, 7.0, 7.1, 7.2)\n\033[00m"
|
|
phpversion = STDIN.gets.chomp
|
|
print "\n"
|
|
# Php version selection
|
|
case (phpversion)
|
|
when "5.6", "7.0", "7.1", "7.2"
|
|
print "\033[32mSelected PHP version : "+phpversion+"\n\033[00m"
|
|
print "Continue ? (Y/n) \n"
|
|
continue = STDIN.gets.chomp
|
|
case continue
|
|
when 'n', 'no', 'N', 'NO'
|
|
raise "\033[31mBuild aborted\033[00m"
|
|
else
|
|
if (type == '1')
|
|
$box.concat(phpversion)
|
|
end
|
|
print "\033[32m-----------------------------------------------\n"
|
|
print "Build with PHP"+phpversion+"\n"
|
|
print "-----------------------------------------------\n\n\033[00m"
|
|
|
|
end
|
|
else
|
|
raise "\033[31mYou should specify php version before running vagrant\n\n (Available : 5.6, 7.0, 7.1, 7.2)\n\n\033[00m"
|
|
end
|
|
end
|
|
|
|
$root = File.dirname(File.expand_path(__FILE__))
|
|
|
|
def config_net(config)
|
|
config.hostmanager.aliases = [
|
|
$hostname + ".vb",
|
|
"www." + $hostname + ".vb",
|
|
"dev." + $hostname + ".vb"
|
|
]
|
|
|
|
# Assign static IP if present in network config
|
|
if File.file?($root + "/.network.conf")
|
|
ipAddress = File.read($root + "/.network.conf")
|
|
#config.vm.network :private_network, ip: ipAddress
|
|
else
|
|
# vboxnet0 can be changed to use a specific private_network
|
|
config.vm.network :private_network, type: "dhcp"
|
|
config.vm.provider "virtualbox" do |vb|
|
|
|
|
if $env == "mac" || $env == "linux"
|
|
vb.customize ["modifyvm", :id, "--hostonlyadapter2", "vboxnet0"]
|
|
else
|
|
vb.customize ["modifyvm", :id, "--hostonlyadapter2", "VirtualBox Host-Only Ethernet Adapter"]
|
|
vb.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/vagrant", "1"]
|
|
end
|
|
end
|
|
|
|
config.vm.network :public_network, bridge:"en0: Ethernet"
|
|
|
|
config.hostmanager.ip_resolver = proc do |vm, resolving_vm|
|
|
if vm.id
|
|
if $env == "mac" || $env == "linux"
|
|
`VBoxManage guestproperty get #{vm.id} "/VirtualBox/GuestInfo/Net/1/V4/IP"`.split()[1]
|
|
else
|
|
`"C:/Program Files/Oracle/VirtualBox/VBoxManage" guestproperty get #{vm.id} "/VirtualBox/GuestInfo/Net/1/V4/IP"`.split()[1]
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
# By default, the name of the VM is the project's directory name
|
|
$hostname = File.basename($root).downcase
|
|
|
|
if $env == "mac"
|
|
# $hostIps = `ip addr show | grep inet | grep -v inet6 | cut -d' ' -f6 | cut -d'/' -f1`.split("\n");
|
|
$hostIps = `ip addr show | sed -nE 's/[[:space:]]*inet ([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3})(.*)$/\\1/p'`.split("\n");
|
|
else if $env == "linux"
|
|
$hostIps = `ifconfig | sed -nE 's/[[:space:]]*inet ([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3})(.*)$/\\1/p'`.split("\n");
|
|
else
|
|
$hostIps = `resources/ansible/inventories/GetIpAdresses.cmd`;
|
|
end
|
|
end
|
|
|
|
Vagrant.configure("2") do |config|
|
|
# Configure hostmanager
|
|
config.hostmanager.enabled = true
|
|
config.hostmanager.manage_host = true
|
|
config.hostmanager.ignore_private_ip = false
|
|
config.hostmanager.include_offline = true
|
|
|
|
config.vm.hostname = $hostname
|
|
|
|
config.vm.provider :virtualbox do |v|
|
|
v.name = $hostname
|
|
v.customize [
|
|
"modifyvm", :id,
|
|
"--name", $hostname,
|
|
"--memory", 4096,
|
|
"--cpus", 2,
|
|
]
|
|
end
|
|
|
|
config.vm.box = $box
|
|
config.ssh.forward_agent = true
|
|
config_net(config)
|
|
|
|
# If ansible is in your path it will provision from your HOST machine
|
|
# If ansible is not found in the path it will be instaled in the VM and provisioned from there
|
|
if which('ansible-playbook')
|
|
|
|
if $playbook
|
|
config.vm.provision "ansible_local" do |ansible|
|
|
ansible.playbook = $playbook
|
|
ansible.limit = 'all'
|
|
ansible.verbose = 'vvv'
|
|
ansible.extra_vars = {
|
|
hostname: $hostname,
|
|
host_addresses: $hostIps,
|
|
phpversion: phpversion,
|
|
postfix: {
|
|
postfix_domain: $hostname + ".vb"
|
|
}
|
|
}
|
|
end
|
|
end
|
|
|
|
config.vm.provision "ansible_local", run: "always" do |ansible|
|
|
ansible.playbook = "resources/ansible/playbook-always.yml"
|
|
ansible.limit = 'all'
|
|
ansible.verbose = 'v'
|
|
ansible.extra_vars = {
|
|
host_addresses: $hostIps,
|
|
hostname: $hostname
|
|
}
|
|
end
|
|
else
|
|
config.vm.provision :shell, path: "resources/ansible/windows.sh", args: [$hostname, $phpVersion, $hostIps]
|
|
# config.vm.provision :shell, run: "always", path: "resources/ansible/windows-always.sh", args: ["default"]
|
|
end
|
|
|
|
if $env == "mac" || $env == "linux"
|
|
config.vm.synced_folder "./", "/vagrant", type: "nfs", mount_options: ['rw', 'vers=3', 'tcp', 'fsc']
|
|
else
|
|
# config.vm.synced_folder "./", "/vagrant", type: "smb", mount_options: ["vers=3.02","mfsymlinks","noserverino"]
|
|
config.vm.synced_folder "./", "/vagrant"
|
|
|
|
end
|
|
end
|