Why is Vagrant hosting my project directory on the guest machine? - vagrant

For a project with a file /foo/bar/Vagrantfile, Vagrant shares/syncs /foo/bar on the host machine as /vagrant on the guest machine.
Why is it doing this? It appears to be undesirable: the whole point is achieving isolation, but this sharing destroys isolation: a buggy VM can delete my project directory, and my tinkering with my project can affect the VM.
So, what is the point of this? Is it necessary for something I've overlooked?

Vagrant by default sync the project directory (where Vagrantfile resides) with /vagrant within the guest.
If it is NOT desired, it can be disabled by explicitly disable the synced folder config in Vagrantfile and then a vagrant reload is needed.
config.vm.synced_folder ".", "/vagrant", disabled: true
If one-off or manual sync is required, use the new rsync type added in vagrant 1.5.x.

Related

Default shared folder in vagrant not visible

I have a problem with synced folder in Vagrant. My config is really simple:
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/xenial64"
config.vm.network :forwarded_port, guest: 80, host: 8080
config.vm.synced_folder ".", "/vagrant"
end
Vagrant usually creates /vagrant folder automatically on start - this time it did not happen so I've done it manually.
But when I create a file in my host system - it's not visible in guest. Any ideas why?
I've succesfully created a similar configuration with:
config.vm.box = "hashicorp/precise64"
but it's a little bit outdated and I want to use Ubuntu 16.04.
Is it a problem with my config, vagrant box, or something else?
You could try: Make sure you have the latest version of Vagrant and VB. Restart your computer (I know, but it sometimes does help in these cases). Try again in a new directory (or vagrant destroy if you want to start fresh and don't need any old content), i.e., make sure the old .vagrant directory isn't there.
vagrant up or vagrant reload and check again.
Assuming you are using VirtualBox, make sure you don't have any "Guest Additions" issues. You could try https://github.com/dotless-de/vagrant-vbguest
If it still doesn't work, check the --debug output again as #frédéric-henri mentioned -- look for all mentions of your share name. Also "/vagrant" isn't always the default, it depends on the box. Sometimes it's "/vagrant_data" or others, but if you specify "/vagrant" in the config -- that should work.

vagrant - Vagrantfile: sync multiple folders

I have tried the following to sync multiple folders from host to guest machine.
But only one folder is getting synced, the later one.
config.vm.synced_folder "host/site1", "/var/www/site1"
config.vm.synced_folder "host/site2", "/var/www/site2"
In newest virtualbox and vagrant versions this is improved and work without problems...

Use nfs to for default folder with vagrant

I want to migrate a big project (5000 files) to vagrant with virtualbox.
Virtualbox shared folders is known to be slow for big project, so I want to use NFS.
But, I don't find the right way to use NFS instead of the default shared folder issue. It works when I put code in another folder, and share it. But I want to integrate Vagrant in the current one.
config.vm.synced_folder '.', '/vagrant', nfs: true
doesn't work:
exportfs: duplicated export entries:
exportfs: 10.11.12.13:/home/vincent/workspace/gp
exportfs: 10.11.12.13:/home/vincent/workspace/gp
Any idea to solve this strange issue?
Thank you.
Update 1
Same error with these parameters
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.synced_folder ".", "/home/vagrant/gp", nfs: true
Here is the full error stack:
nfsd running
exportfs: duplicated export entries:
exportfs: 10.11.12.13:/home/vincent/workspace/gp
exportfs: 10.11.12.13:/home/vincent/workspace/gp
==> default: Mounting NFS shared folders...
Vagrant::Errors::LinuxNFSMountFailed: The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
mount -o 'vers=3,udp' 10.11.12.1:'/home/vincent/workspace/gp' /home/vagrant/gp
Stdout from the command:
Stderr from the command:
stdin: is not a tty
mount.nfs: access denied by server while mounting 10.11.12.1:/home/vincent/workspace/gp
You may need to explicitly disable the default synced folder by adding the following line in your Vagrantfile so as to mount the NFS share to /vagrant
config.vm.synced_folder ".", "/vagrant", disabled: true
After than do a vagrant reload and see if it works.
In addition, consider using rsync type synced folder for your use case, I think it works even better. See https://docs.vagrantup.com/v2/synced-folders/rsync.html
You can also get this error message if you are trying to create a vm in a directory above another previously created vm. You will need to destroy the the vm's in each sub-directory.

Vagrantfile: Disabling synced folders for one provider, but not another

I have been using Vagrant with VirtualBox for local development. Now, I want to deploy to Azure (question would be same with AWS).
When working locally with VirtualBox, it's awesome to have the synced folder. But I definitely don't want a synced folder for the cloud VM. So, how can I have it enabled for the former but disabled for the latter?
A snippet of my vagrantfile is below; however this doesn't seem to have any effect. Appreciate any pointers.
Vagrant.configure('2') do |config|
config.vm.synced_folder ".", "/vagrant"
# …
config.vm.provider :azure do |azure, override|
override.vm.synced_folder ".", "/vagrant", disabled: true
# …
End
# …
end
I've also tried initially disabling the synced folder, and then enabling it only for VirtualBox - but Azure still prompts for username/password and attempts to create an SMB share.
Update: Even if I disable it in the main section, and don't touch it for Azure, it still tries to create a SMB share, and complains that it can't find my machine (my laptop is behind NAT).
It turns out that the default synced folder was indeed being disabled correctly.
However, the Chef provisioner was being used, and behind the scenes this also uses synced folders! The solution therefore is to use a Chef server, or as I chose - to do everything via a shell provisioner.
Hope this question helps someone encountering this problem in the future.
I had the same problem with SMB synced folders not staying disabled even though I hade the correct lines to disable.
My problem was also caused by chef enabling synced folders again. I solved my problem by adding the chef.synced_folder_type = "rsync" to the chef config block:
config.vm.provision :chef_solo do |chef|
chef.synced_folder_type = "rsync"
[...more chef config...]
end

How to disable shared folders for puppet provisioner in Vagrant

I want to disable creating and mounting any shared folders for vagrant VMs.
I've found a way to disable sharing main /vagrant folder and instead uploading necessary files, but not able to find a way to disable shared folder creation for puppet provisioner.
I want to upload puppet files to VM instead of sharing from my host OS. Is it possible to do?
You could use rsync synced folder type (the docs):
Vagrant.configure("2") do |config|
config.vm.provision "puppet" do
puppet.synced_folder_type = "rsync"
# ...
end
end

Resources