versão rápida:
vagrant é uma ferramenta para trabalhar com instâncias de virtualbox. Isso é normalmente usado durante o desenvolvimento (em um mac) para testar a implantação de seu aplicativo em máquinas virtuais que se parecem mais com seu ambiente de produção (ou seja, linux). Ele tem uma pilha de manipuladores (ruby) personalizáveis para criar um ambiente virtual como você quiser. O Vagrant é uma ferramenta poderosa para gerenciar programaticamente ambientes virtuais e fornece todos os tipos de variações "locais" de técnicas de desenvolvimento de estilo de integração contínua. É mais usado para executar o Ubuntu VMs em um Mac, mas será executado em várias plataformas e implantará vários sistemas operacionais de destino. Afaik, só funciona com o virtualbox como um "provedor" subjacente.
O juju é uma ferramenta para orquestrar serviços usando vários provedores subjacentes diferentes: nuvens ec2, nuvens em nuvem aberta, VMs lxc e servidores MaaS. Ele compartilha uma história de "desenvolvimento local" (usando contêineres lxc em vez de VMs de caixa virtual) com vagrant, mas essa é realmente a única sobreposição. Na verdade, eu gostaria de ver um provedor vagrant escrito para o juju, então o juju pode direcionar contêineres de virtualbox em um ambiente local com a mesma facilidade com que ele gera imagens de nuvem e lxc. Isso seria ótimo! Além disso, o juju realmente deriva muito do seu valor do conjunto de charms / serviços que podem ser gerados diretamente, enquanto o vagrant é essencialmente um provedor de contêiner local de nível inferior.
Na verdade, fornecemos uma caixa Vagrant com Juju para que os usuários possam testar o provedor local de dentro de uma VM:
Observe que houve esforços para "unificar" os scripts de implantação em torno do vagrant para que os mesmos scripts possam ser usados para implantar em instâncias de nuvem, bem como em caixas vagrant. Estes parecem ser, na maior parte do tempo, isolados do vagabundo e, francamente, apenas destacam a necessidade de uma ferramenta como o juju.