currently our setup procedure for new developers is a rather tedious process (especially for Windows users). It often involves creating a Linux VM and setting everything up by manually executing lots and lots of commands and you have to wait for hours until certain tasks complete. In the end you get a unique system which produces errors other devs may not be able to reproduce and the other way around. Nobody likes waiting and inconsistent development environments. Additionally I want to enable all developers to use their favorite OS for tinkering with Element43. Therefore: Ansible and Vagrant to the rescue!
Ansible is a very simple open-source configuration management system written in Python which allows you to define processes called 'playbooks'. A playbook consist of a YAML-formatted list of tasks like installing a certain package or creating a user, which will later be executed on an arbitrary target machine. With a collection of those playbooks it is possible to define the state of a whole machine. It does not matter how often you run a playbook, since all tasks are designed to act 'idempotent'. This means changes are only being made as they are needed e.g. pulling updates from a git repository. Running the script an additional time won't have any effect.
Ansible also does not require the target to have any client application or whatsoever installed, since the controlling machine executes all commands directly over SSH. In fact Element43's main server is managed by Ansible. This allows us to quickly set up a new system every time we're moving servers. But we can take all this a step further. With a few modifications to our existing playbooks we can simply define a unified virtual machine for development use. Setting up a new local instance of Element43 turns into into a matter of executing a single command: 'vagrant up'.
In our case Vagrant is responsible for providing the link between VirtualBox and Ansible. Now that we have defined the software-side of things, we still need some (virtual) hardware to run it on. This is where Vagrant comes into play. It downloads the latest VirtualBox image of Ubuntu Server and automatically runs our Ansible playbooks on a fresh virtual machine. Done.
Currently I'm working around some compatibility issues on Windows host machines. I want to bring you as close to 'one-click' as possible. Stay tuned!