At SugarCRM, we are deploying Vagrant stacks as part of the DevOps Initiative. How ever we ran into a few problems with defining shares. Since no two engineers work the same or have the same setup we couldn’t define shares that were hard coded in the Vagrantfile. We had to come up with a way to do shares that end user could customize easily. While looking for solutions someone pointed out that the Vagrantfile is just Ruby and we could use YAML to define the shares. The seed had been planted and this is the bit of code we came up with.
Place this bit of code inside the Vagrantfile:
VAGRANTFILE_API_VERSION = '2'
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Start Dynamic Shares
yaml = YAML.load_file(Dir.pwd + '/share.yaml')
yaml.each do |share|
share_group = 'vagrant'
share_group = 'apache' if share['target'] =~ /www\/html/
config.vm.synced_folder share['source'], share['target'], create: true, owner: 'vagrant', group: share_group
# End Dynamic Shares
This method allows the user to create a share.yaml next to the Vagrantfile, which it will then be picked up and converted into the config.vm.synced_folder attribute when then
vagrant up or
vagrant reload command is issued.
Hope this helps others!