Atualmente, estou tentando editar nossa imagem existente do Vagrant / VirtualBox para que, quando os usuários não estiverem na rede do escritório, eles se conectem por meio da conexão do OpenVPN no computador host.
Depois de examinar algumas publicações diferentes, desativei a opção de rede pública e habilitei a pesquisa de DNS do host, mas sempre que inicio a máquina virtual, recebo uma mensagem de erro "rede inacessível".
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Developer specific settings
developer = ENV['VAGRANT_DEV']
example_path = ENV['VAGRANT_REPO']
# Perform a quick sanity check, to ensure everything actually is set up.
if developer.empty? or example_path.empty? then
puts "Developer or example path not set"
exit
end
# Vagrant settings
Vagrant.configure("2") do |config|
{
# Define which VMs to run
'dev' => {
:roles => ["devbox"]
},
# 'web' => {
# :roles => ["webworker", "queue", "cron"],
# :use_remote_git => true
# }
}.each do |name, cfg|
# Enable the hostmanager plugin (Only works with VirtualBox on OS X/Linux)
if Vagrant.has_plugin?("vagrant-hostmanager") then
config.vm.provision :hostmanager do
config.hostmanager.enabled = false
config.hostmanager.manage_host = true
config.hostmanager.include_offline = false
end
end
config.vm.define name do |vm_config|
# Give the box enough memory, more CPUs, etc.
vm_config.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "2048"]
vb.customize ["modifyvm", :id, "--cpus", "2"]
vb.customize ["modifyvm", :id, "--ioapic", "on"]
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
# Set up the host computer's hosts file
if Vagrant.has_plugin?("vagrant-hostmanager") then
config.vm.provision :hostmanager do
if cfg.has_key?(:roles) and cfg[:roles].include?("devbox") then
vm_config.hostmanager.ip_resolver = proc do |vm, resolving_vm|
if vm.id
'VBoxManage guestproperty get #{vm.id} "/VirtualBox/GuestInfo/Net/1/V4/IP"'.split()[1]
end
end
vm_config.hostmanager.aliases = Dir.glob(example_path + '/www/clients/*/sites/*').each { |d| d.replace(d.gsub(/.*\/sites\//,"") + "." + developer + ".bc") }
end
end
end
end
# General VM setup
#vm_config.vm.network :public_network
vm_config.vm.network :private_network, ip: "172.21.1.180"
vm_config.vm.box = name
vm_config.vm.hostname = "#{name}-#{developer}"
vm_config.vm.box_url = "http://vagrant.office.example.com/package.box"
# Share the host machine's example folder with the VM
vm_config.vm.synced_folder example_path, "/example",
:mount_options => ["dmode=777","fmode=666"]
# Tell the OS to use eth1 as the default route, which results in Chef getting the correct IP.
config.vm.provision :shell, run: "always", inline: <<-SCRIPT
sudo route del default || true # Make sure we delete the current default route.
sudo route add default gw 172.20.0.1 || true
if [[ ! -d "/etc/chef" ]] ; then sudo mkdir /etc/chef; fi
if [[ ! -f "/etc/chef/webworker.key" ]] ; then sudo wget -O/etc/chef/webworker.key http://vagrant.office.example.com/webworker.key 2>/dev/null; fi
SCRIPT
# Provision with Chef
vm_config.vm.provision :chef_client do |chef|
# Set up chef config
chef.chef_server_url = "https://chef.internal.office.example.com/"
chef.validation_key_path = "validation.pem"
chef.environment = "internal"
chef.node_name = "#{name}-#{developer}"
# Chef attributes
chef.json = {
"example" => {
"example_deployed_path" => "/example/",
"devbox" => {
"developer" => developer
}
},
"chef_client" =>{
"config" => {
"node_name" => "#{name}-#{developer}"
}
}
}
if cfg.has_key?(:use_remote_git) and cfg[:use_remote_git] then
chef.json['example'].delete('example_deployed_path')
end
# Add roles
chef.add_role "example-base"
if cfg.has_key?(:roles) then
cfg[:roles].each do |role|
chef.add_role role
end
end
end
end
end
end