Vagrant.configure(2) do |config| # enable env plugin config.env.enable # base box config.vm.box = "centos/7" # add synced host folder with guest folder config.vm.synced_folder ".", "/vagrant", type: "virtualbox" # ssh configuration config.ssh.insert_key = false config.ssh.private_key_path = [ENV['PRIVATE_KEY_PATH'], "~/.vagrant.d/insecure_private_key"] machines = { 'izyim' => { :ip => '10.0.0.20', :provision => './scripts/izyim.sh', :cores => '2', :memory => '1024', :guest_port => '22', :host_port => '2201' }, 'exchange' => { :ip => '10.0.0.21', :provision => './scripts/exchange.sh', :cores => '2', :memory => '1024', :guest_port => '22', :host_port => '2202' } } machines.each do |hostname, attrs| config.vm.define hostname do |machine| # set up the hostname machine.vm.hostname = hostname # set up private network machine.vm.network "private_network", ip: attrs[:ip] # enable port forwarding machine.vm.network :forwarded_port, host_ip: '127.0.0.1', id: 'ssh', guest: attrs[:guest_port], host: attrs[:host_port], protocol: 'tcp' # provision scripts machine.vm.provision "file", source: ENV['PUBLIC_KEY_PATH'], destination: '~/.ssh/authorized_keys' machine.vm.provision :shell do |provision| provision.path = attrs[:provision] end # virtualbox specific settings machine.vm.provider "virtualbox" do |v| v.memory = attrs[:memory] v.cpus = attrs[:cores] end end end end