Default shared folder in vagrant not visible - vagrant

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.

Related

Please clarify vagrant behavior

I have just started working with Vagrant. After starting guest machine and making some changes (e.g. installed some updates and python virtualenvs). And after few (vagrant halt and vagrant reload) when I ssh-ed into guest machine I noticed that all my changes disappeared. When I opened the Virtualbox I saw that there were two boxes with the name of my folder with guest os and on every vagrant up it seems like it is starting the second machine. When I started the first guest os through virtual box interface I saw that my data was present. How can I start with vagrant the first machine? Should I delete the second? When was it created?
Start with vagrant up
Vagrantfile
Vagrant.configure(2) do |config|
config.vm.box = "trusty_14"
config.vm.network "forwarded_port", guest: 8000, host: 8000
end`
So I tried to vagrant destroy. The second machine was deleted indeed, but after vagrant up the new one was created.
Then I checked the id's following #Frédéric Henri advice, and in id file was id of second machine, so I have replaced it with the id of first machine from VBoxManage list vms, and everything works!
But still did not get how and when the second machine was created...

Vagrant workflow

Hi i was trying to understand what exactly is done when running
vagrant up
my reason for that is that in my case we need to install a lot of utilities.
i.e Version control tools, build tools, ide, etc...
which takes a lot of time.
so actually i wanted a 'box' with all those tools.
After i have clean environment and got all tools, i would like to make CI for our product.
If i will reinstall all utilities it should take a lot of time. so what i am actually need is just installing and testing our product.
How should i handle that ??
create my own box? does the command reinstall all utilities when we make CI ??
what i actually need are 2 processes :
1.installing utilities for my vm. (once a month)
2.test our product (each commit\push to version control)
how can i achieve that ?
For the first time, vagrant up will create a new VM for you, pulling the box image if needed, and it will provision it with what you configured in the Vagrantfile. In the provision configuration, you can tell Chef or Puppet to install all the utilities and tools that you need.
When you suspend or halt the VM, the next time you do a vagrant up it will only bring that VM back up. It will not install or try to provision it again.
You can force it with vagrant up --provision or just vagrant provision.
This usually works well in a development environment.
In a CI environment, it may not be possible to have the VM already provision, forcing you to run the provisioning step every time. You can achieve what you need packaging your own box with the tools already installed, essentially creating a golden or base image.
Just be extra careful so that the CI environment don't differ for what you have in production.
All depend on the setting in Vagrantfile
you have modules folder to put all puppet modules, manifests folder with site.pp and Vagrantfile as below under same place.
Give you a sample of Vagrantfile I used mostly.
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "precise64"
config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-amd64-vagrant-disk1.box "
config.vm.provision :puppet do |puppet|
puppet.module_path = "modules"
puppet.manifests_path = "manifests"
puppet.manifest_file = "site.pp"
end
config.vm.define :www do |config|
config.vm.host_name = "www.example.com"
config.vm.network :private_network, ip: "192.168.1.2"
end
config.vm.define :db1 do |config|
config.vm.host_name = "db1.example.com"
config.vm.network :private_network, ip: "192.168.1.4"
end
end
So after run vagrant up www or vagrant up db1 it will start the box with puppet apply directly. You can understand this way as puppet masterless
Vagrant just make the box up running from linux image defined in config.vm.box_url as a simple fresh linux box, and mount your local folder to new box's /vagrant folder, then hand over to puppet. How the server to be provisioned, will be depended on site.pp (define applications on each node) and puppet modules. The command is similar as
puppet apply --modulepath /vagrant/module /vagrant/manifests/site.pp
So if your puppet modules are fine, your new box will automatically have all utilities and products installed. Then you run vagrant ssh www or vagrant ssh db1, you can login it and start working.
You can put your local folder with moduels, manifests folders and Vagrantfile to version control (such as git). So developers can clone the git repository to their own computer easily.

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 use vagrant in development and how to use shared folders?

I (a struggling newbie in vagrant) have done setup a vagrant environment for development. i have been provided with vagrant file
Vagrant.configure("2") do |config|
config.vm.box = 'precise64'
config.vm.box_url = 'http://files.vagrantup.com/precise64.box'
config.vm.network :forwarded_port, guest: 80, host: 8080
config.vm.provision :puppet do |puppet|
puppet.module_path = "config/puppet/modules"
puppet.manifests_path = "config/puppet/manifests"
puppet.manifest_file = "base.pp"
end
config.vm.provider :virtualbox do |v|
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end
end
the config/puppet/manifests contains following base.pp file
Exec {
path => "/usr/bin:/bin:/usr/sbin:/sbin"
}
stage { 'first':
before => Stage['main']
}
class {
'system': stage => first;
'mysql': stage => main;
'apache': stage => main;
'php': stage=> main;
'git': stage=> main;
'cake': stage=> main;
}
and config/puppet/modules containing directories apache,cake,git,mysql,php and system.
What i did so far is
1) Installed VirtualBox
2) Installed Vagrant
3) Vagrant up (as specified everywhere in net)
What i got is
1) a virtualbox (having no GUI)
2) SSH connection to virtaul box
3) and a shared folder.
now i have some questions so that i can understand it well
1) Am i going in right direction in order to setup vagrant?
2) What is precise64.box(just console box), can't i add ubuntu as a box and everything set up(i.e. php, apache n other modules specified in puppet modules) in that ubuntu?
3) Where does puppet install all these modules? in Host(Windows) or in Guest(precise64)?
4) What config.vm.network :forwarded_port, guest: 80, host: 8080 do?
5) what does shared folder do? and where does the shared folder reside in virtual box(precise64) and what i could/should do with this shared folder?
6) where do i install Netbeans/Eclipse in order to develop my code?
7) Any references/blog that describe vagrant and its advantages in and out?
I am trying to understand but couldn't figure it out how to understand vagrant (as a developer) and develop something. Any help or explanation would be appreciable and i guess these could be most common points that is hard for any newbie to understand.
1) Yes, looks like you're doing everything right to me. There's really no right or wrong if it works, your config looks pretty standard. (Not sure about your puppet config...I've never used that)
2) .box files are basically install cds that are packaged specifically for vagrant. In this case, you're downloading and installing http://files.vagrantup.com/precise64.box, which is essentially a bare-bones off the shelf ubuntu 12.04 64 bit server. You can find other prepackaged boxes here. The point of vagrant is to be able to start with a barebones OS and built it up by use of provisioning files (chef, puppet, bash, etc.).
3) Everything in vagrant is very self contained within the VM its creating, I don't know much about puppet but I would assume it works much the same way that the bash provisioning files I use work. It boots the VM, then runs your provisioning scripts within the VM so that you have a reproducible VM creation process.
4) Port forwarding. guest: 80, host :8080 means that anything within the VM (guest) serving on port 80 will be available on the host (your pc) at http://localhost:8080.
5) Shared folders are AWESOME. Basically, your VM will have access to a folder from your host machine which is incredibly helpful for question number 6. Doing something like:
config.vm.synced_folder "src/", "/vagrant"
will make the src directory in your project (on the host) available to the vm at the mount point /vagrant. So you can have an IDE installed on your host, edit files in src and they'll automatically be available in your VM at /vagrant. More on that here.
6) On your host machine. See answer to number 5.
7) Perhaps google is your best friend for this one. The biggest advantage for me is that we can check our Vagrantfile into our git repo next to the rest of our application code and any new member of our team can have the application running locally within minutes by navigating to the directory and running vagrant up. Mess something up within the VM and need to start fresh? vagrant destroy -> vagrant up. Not having to install a bunch of packages specific to an application on your host machine is invaluable.

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

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.

Resources