What is your VM workflow?

8 points by jklein11 ↗ HN
VMs seem to be an elegant solution to a very stick problem. Getting every developer's environment set up exactly the same can be a hassle, especially if you are working with Junior Devs. I'm curious about your VM workflow, specifically which tools you use(i.e VMWare vs Virtualbox or Vagrant) and how you incorporate them into your workflow.

5 comments

[ 2.6 ms ] story [ 25.0 ms ] thread
My primary Ubuntu virtual machine with vmware fusion is quite frustrating when tabbing between it and other applications on the native OS. Hitting cmd+tab to go from Ubuntu to chrome opens up a search menu on Ubuntu that requires you to hit esc before getting back to work. Very annoying, anyone also run into this issue?
Why not just disable that keyboard shortcut in your Ubuntu VM?
Am I alone in thinking that emulating a physical machine, installing an operating system on that virtual physical machine and so on and end up with two operating systems running in parallel on the same physical machine which needs to be patched and maintained is not an elegant solution? After a while, every developer might have five machines which he need to keep patched and maintained.

Personally I just have VMware Workstation for this at home and VMWare ESX cluster at work.

I assume you're talking about developer environments here.

If you use Vagrant, the actual virtualisation tool used can be up to the individual - i.e. I use Parallels but a lot of people may use VirtualBox because it's free (albeit has worse performance).

The key thing is to use the tools well - have your development environment match staging/prod as closely as possible - distro + version, stack components, etc. If its possible, re-use your setup scripts/config management system across all environments.

we use virtualbox and a bare template Ubuntu image. the workflow is like this.

developer installs virtualbox and downloads the small image to this laptop. Then the developers does a git pull of our Ansible code, the Ansible code contains a subdirectory with shell scripts that can create headless virtualmachines for any of our application stacks. Then he does an ansible run against this new machine and Ansible will provision a full instance running our stack on this new dev environment

Python + MySQL Kafka/ Flume Mongodb Hadoop

basically the developer can have a full stack running on his machine and it is not slow. Most machines have 16Gigs of memory and lots of cpu power so we haven't had anyone complain that things are slow. Developers can create or destroy environments and they know they can rebuild them locally.

We tried doing this with docker and got it working but it was actually slower in docker and don't get me started using docker on the mac. the devs hated it and love ansible better