Vagrant: sudo access and the hostsupdater plugin

Bringing up a vagrant machine is as easy as `vagrant up`.

If you’re a web developer, it would be nice if it were to add the private network IP address to `/etc/hosts` of the host machine. Thus giving you instant access to http://my-awesome-site.dev/

This doesn’t happen by default, but it is possible with the use of a plugin. The one I like to use is `vagrant-hostsupdater`.

Install thus:

vagrant plugin install vagrant-hostsupdater

When you bring up the vagrant machine, it will now automatically add the VM’s name to `/etc/hosts`.

As `/etc/hosts` is owned by `root` (and I hope you aren’t running everything as `root`), you have to provide `sudo` access to edit `/etc/hosts`.

Either you manually enter your `sudo` password every time you run `vagrant up`, or you can add some rules to `sudoers`.

This will work on Ubuntu type systems. Paths to `sh` and `sed` may be different on your own system.

Copy/paste the following into `/etc/sudoers.d/vagrant` and `chmod` the file to `0440`

# vagrant-hostsupdater plugin
Cmnd_Alias VAGRANT_HOSTS_ADD = /bin/sh -c echo "*" >> /etc/hosts
Cmnd_Alias VAGRANT_HOSTS_REMOVE = /bin/sed -i -e /*/ d /etc/hosts
%sudo ALL=(root) NOPASSWD: VAGRANT_HOSTS_ADD, VAGRANT_HOSTS_REMOVE

A similar system can be used if you want to make use of `nfs` for the file sharing with the VM.

Again, this works for Ubuntu systems, you mileage may vary.

Copy/paste the following into `/etc/sudoers.d/vagrant` and `chmod` the file to `0440`

# nfs mounting in vagrant
Cmnd_Alias VAGRANT_EXPORTS_ADD = /usr/bin/tee -a /etc/exports
Cmnd_Alias VAGRANT_EXPORTS_COPY = /bin/cp /tmp/exports /etc/exports
Cmnd_Alias VAGRANT_NFSD_CHECK = /etc/init.d/nfs-kernel-server status
Cmnd_Alias VAGRANT_NFSD_START = /etc/init.d/nfs-kernel-server start
Cmnd_Alias VAGRANT_NFSD_APPLY = /usr/sbin/exportfs -ar
Cmnd_Alias VAGRANT_EXPORTS_REMOVE = /bin/sed -r -e * d -ibak /tmp/exports
%sudo ALL=(root) NOPASSWD: VAGRANT_EXPORTS_ADD, VAGRANT_NFSD_CHECK, VAGRANT_NFSD_START, VAGRANT_NFSD_APPLY, VAGRANT_EXPORTS_REMOVE, VAGRANT_EXPORTS_COPY

You will now be able to use `nfs` without having to enter your `sudo` password on each `vagrant up` and `vagrant halt`.