I've been reading about Vagrant, and I find it quite useful for my development. I am currently managing a series of services (mail, web, LDAP, file sharing, etc.), and often one of these falls and needs a quick backup. Is it possible (and recommended) to use Vagrant for these purposes?
So far I've virtual machines installed like real machines.
I would also like to know about an alternative to Vagrant which would allow me to setup a simple configuration file and put a virtual machine, for example, with Zimbra, and quickly have an alternate mail server, enable RabbitMQ, etc.
Hashicorp just published Otto, which is meant to be the Vagrant's successor. It is designed to support deployment environments.
From their Github page:
The key features of Otto are:
Automatic development environments: Otto detects your application type and builds a development environment tailored specifically for that application, with zero or minimal configuration. If your application depends on other services (such as a database), it'll automatically configure and start those services in your development environment for you.
Built for Microservices: Otto understands dependencies and versioning and can automatically deploy and configure an application and all of its dependencies for any environment. An application only needs to tell Otto its immediate dependencies; dependencies of dependencies are automatically detected and configured.
Deployment: Otto knows how to deploy applications as well develop them. Whether your application is a modern microservice, a legacy monolith, or something in between, Otto can deploy your application to any environment.
Docker: Otto can use Docker to download and start dependencies for development to simplify microservices. Applications can be containerized automatically to make deployments easier without changing the developer workflow.
Production-hardened tooling: Otto uses production-hardened tooling to build development environments (Vagrant), launch servers (Terraform), configure services (Consul), and more. Otto builds on tools that powers the world's largest websites. Otto automatically installs and manages all of this tooling, so you don't have to.
As mentioned by @andrerpena, Otto is the successor of Vagrant.
From www.ottoproject.io :
This page suggests that the Vagrant push command is meant for deploying to production:
https://www.hashicorp.com/blog/vagrant-push-one-command-to-deploy-any-application/
"Additionally, multiple config.push.define declarations can be in a Vagrantfile to define multiple pushes, perhaps one to staging and one to production, for example."
Vagrant should be used more like a staging environment to test your infrastructure changes. It should be your test bed for automated infrastructure changes.
The way we use it at my company is like so:
Basically when we're happy with our changes, we'll pull our puppet changes into production to make it happen.
I'd not recommend using vagrant to manage VMs for real production. I'd use something else like razor, virsh, OpenStack or one of the many other vm management systems out there.