Vagrant synced folder options

Douglas Choma picture Douglas Choma · May 22, 2014 · Viewed 10.1k times · Source

What is the best method for implementing Vagrant NFS "synced folders" between host and VM?

I was finally able to get NFS working, in general, but it required several tweaks within the VM; and I'm not sure how to automate those changes for others to use.

Specifically, I have to modify the UID/GID in /etc/passwd and /etc/group to match those of the user/group of the exported filesystem. (e.g. host machine uses 502:20, VM apache user must be set to use 502:20 as well)

Without this change, I have all kinds of permission/ownership issues that prevent the web app from running. With the UID/GID matching, everything works great.

I've read all the docs I could find, including the Vagrant web site.

As a side note: I also tried native folder sync (painfully slow) and rsync (100% CPU... unusable)

NFS seems like the winner for performance, but my setup is sketchy.

If it makes any difference, I'm working with the following:

  • Host: OS X 10.9.2
  • Vagrant: 1.5.4
  • Provider: VMware Fusion
  • Box: chef/centos-6.5
  • Dev app: Magento 1.8

Answer

sebastian schön picture sebastian schön · May 27, 2014

In Vagrantfile you can assign the current uid/gid to the nfs mapping. (See on host /etc/exports after provisioning.)

 config.nfs.map_uid = Process.uid   
 config.nfs.map_gid = Process.gid 

With Puppet as provisioner you can facter these values:

 config.vm.provision :puppet, :facter => { 
     "host_uid" => config.nfs.map_uid, 
     "host_gid" => config.nfs.map_gid, 
 } do |puppet| ...

So you can use it in puppet scope like variables e.g.

user { "www-data":
    ensure => present,
    uid => $::host_uid,
    gid => $::host_gid,
}

I think in chef the custom json option is the equivalent to use it later in chef recipes

Vagrant.configure("2") do |config|
  config.vm.provision "chef_solo" do |chef|
        # ...

        chef.json = {
          "map" => {
            "uid" => config.nfs.map_uid,
            "gid" => config.nfs.map_gid
          }
        }
      end
    end