Background
In our company we have different development teams working with same Vagrant boxes. As a challenge they need different sync folder locations – even inside teams. I’m just too lazy to provide and maintain all Vagrantfile templates for their needs. So i provide a quick and dirty solution for them.
Example
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| # box name config.vm.box = "lupin/centos7" # Disable replacing insecure key config.ssh.insert_key = false # Disable default synced folder config.vm.synced_folder ".", "/vagrant", disabled: true # Synced folder(s) by argument if !ENV['mount'].nil? loop do puts "local folder: " local_dir = STDIN.gets.chomp puts "target folder: " target_dir = STDIN.gets.chomp if local_dir.empty? || target_dir.empty? break end config.vm.synced_folder local_dir, target_dir end end # VirtualBox specific configuration config.vm.provider "virtualbox" do |vb| vb.gui = false vb.memory = "1024" vb.cpus = 1 vb.name = "example_vm" end end
Usage
# simple command $ vagrant up # check for synced folder(s) $ vagrant ssh -c 'ls -la /' # destroy environment $ vagrant halt # run with argument (mount) $ mount=yes vagrant up ... local folder: src_a <ENTER> target folder: /vagrant_a <ENTER> local folder: src_b <ENTER> target folder: /vagrant_b <ENTER> local folder: <ENTER> target folder: <ENTER> ... # show content $ vagrant ssh -c 'cat /vagrant_a/SomeTestFile_a && cat /vagrant_b/SomeTestFile_b' ... Hello world ... a Hello world ... b ... # destroy environment $ vagrant destroy -f
😉