Hacker News new | ask | show | jobs
by antidoh 4938 days ago
What is the problem that vagrant solves, that can't be done without virtualbox on its own, or virtualbox and chef/puppet on their own?

Or lacking that, what does vagrant do so much better than the base tools on their own that you would never want to do without it?

As far as I can see you can do all that vagrant does with vboxmanage, vboxheadless and cloning. I generally ssh into my virtualboxes already.

You could even make an argument against vagrant - if you want to maintain the same deployment tools for vboxes and production boxes, so that you can rehearse/test initial deployment, deployment and recovery on a vbox configured as much as possible as a production box.

I'm more than open to correction or persuasion ...

4 comments

It offers a reduction in the time to get started; vagrant provides the wrapper script around vboxmanage that you would otherwise write & debug.

By effectively standardising that tool which many people would otherwise continually reinvent, the group as a whole benefits from sharing and moving things forward, e.g. The many pre-packaged system images, puppet config examples and the like.

If you're not using it, I don't think you'd be missing anything worth losing sleep over.

I looked into it a while back - I saw it as a potential way to save my time documenting our setup for others, but in the end I opted to make my own as we have other tools to be integrated with, and by doing it myself I didn't cost myself any extra time really. I would have had to adapt either vagrant or our machine provisioning setup which would have taken more time than writing a very thin wrapper over vboxmanage.

If you have an elaborate VM management system already set up that you can use on all production and development machines - by any means, use it.

If not, Vagrant provides you with the following in development mode:

* A way to package virtual machines and shift them between machines, probably with different OSes. At our company "could you pack that up and send it" is the new "can you show me this error on my machine"?

* An easy way to track machine configurations in your version control system.

* It has integration into all major provisioning tools, so you can possibly reuse your production environments scripts.

* It cares to configure a lot of details, e.g. forwarding the ssh agent so that not every developer has to care for that.

* A plugin API to build additions independent from the underlying virtualizer (only VirtualBox at the moment, but more in the future), e.g. https://github.com/BerlinVagrant/vagrant-dns (but in that case, sadly not independent of the host os)[1]

And all that, without home-baking.

[1]: Shameless plug: I need help for Linux and Windows

Standardised, platform independent, easy to install and configure tools. If you've got a somewhat complicated dev environment, it's really really easy to tell new developers "look, just install virtualbox, install Vagrant, clone the repo, run vagrant up, and then vagrant ssh". A few minutes later they'll be sitting at an ssh prompt at a fully installed and configured dev server, which is pretty sweet.

Sure, you could do it all with slightly longer and more detailed instructions and more hand rolled scripts, but it would be slower and more fragile. Vagrant doesn't really solve any new unsolved problems, it's just a bit easier than the alternatives.

(Also, I'm not sure I understand your argument against vagrant. Part of the point of vagrant is, yes, to try and maintain the same deployment tools for dev and producton. Why do you think using vagrant makes that harder?)

Probably my lack of understanding of how vagrant fits and works. But you wouldn't use vagrant to manage a production server, so there's an inevitable difference there.
Not at all!

See, you wouldn't use vagrant to manage a dev server either. Rather, the idea is that, in dev, you use vagrant to provision a VM (or multiple VMs; you can replicate your whole stack with multiple web servers, database clusters, load balancers, etc.) which is as close to your production environment as possible. Then you manage this dev environment the exact same way you manage your production environment - with chef or puppet.

Vagrant is taking the role of Amazon's EC2 control panel or the order form on your dedicated server providers website. And none of those manage the server; that's chef or puppets job. (Although it does have great integration with chef and puppet.)

The main differences would be the overall integration and the "Vagrantfile". I.e. you can slap a Vagrantfile into your project (akin to a Rakefile) that defines what a dev-environment should look like.

Some other developer can then just check out the repo, run "vagrant up" and vagrant will take care of downloading the required OS disk-images (*.box-files), launching any number of VMs and triggering your provisioning procedure (puppet, chef, shell-script - whatever) on each.

It's still a lot of work to properly integrate into a project/CI without frequent hickups (e.g. keeping up with ever-changing server-configurations). But it's definitely a solid baseline to start from and saves a lot of work that you'd otherwise spend scripting all this yourself.