What is the difference between vagrant and juju?
Are they both solving the same problem? Or are they for two different sets of problems? If so for what i it better to use vagrant, and for what better to use juju?
quick version:
vagrant is a tool for working with virtualbox instances. This is typically used during development (on a mac) to test-deploy your app into virtual machines that look more like your eventual production (i.e., linux) environment. It's got a customizable (ruby) stack of handlers to create such a virtual environment any way you'd like. Vagrant is a powerful tool to programmatically manage virtual environments and provides for all sorts of "local" variations of continuous-integration-style development techniques. It's most often used to run Ubuntu VMs on a Mac, but will run on various platforms and deploy various target operating systems. Afaik, it only works with virtualbox as an underlying "provider".
juju is a tool to orchestrate services using various different underlying providers: ec2 clouds, openstack clouds, lxc VMs, and MaaS servers. It shares a "local development" story (using lxc containers instead of virtualbox VMs) with vagrant, but that's really the only overlap. In fact, I'd like to see a vagrant provider written for juju so juju can drive virtualbox containers on a local environment with the same ease that it drives cloud and lxc images. That'd be a great fit! Also, juju really derives a lot of its value from the set of charms/services that can be spun up straight out-of-the-box, whereas vagrant's essentially a lower-level local container provider.
In fact we provide a Vagrant box with Juju so that users can test the local provider from within a VM:
- https://jujucharms.com/docs/1.25/config-vagrant
- https://www.youtube.com/watch?v=qLNPn2rQynM
Note that there have been efforts to "unify" deployment scripts around vagrant so that the same scripts can be used to deploy to cloud instances as well as vagrant boxes. These appear to be mostly one-off asides from vagrant proper, and frankly just highlight the need for a tool like juju.
Re "unifying deployment scripts around vagrant", Vagrant has excellent integration with Puppet and Chef, which can be used to automation system configuration across environments, from Vagrant boxes to local hardware to clouds. In fact many people use Vagrant to test their Puppet/Chef scripts before using them in production.
It would certainly be nice to add Juju to the list of automation tools that work with Vagrant.