I presented to all the CoralCEA’s team what I have been working on in my spare time for the last few weeks.
But first a little bit of background
On top of my development tasks I’m also in charge of deployments which includes Virtual Machines creation to support our architecture.
It is not a difficult task but it takes a good amount of time whenever something gets a considerable update.
For example: A Java update or a security bug.
The usual process is:
- Download the ISO file of your favourite Linux Distribution
- Use VMware Fusion to create a blank VM
- Install the base OS
- Pre-configure some key elements for the architecture
The down side, as discussed previously, takes a good chunk of time and it could be prone to errors.
It’s easy to forget a parameter or a specific piece of configuration or script.
Then the VM distribution propagates into all the pieces of our development cycle.
Some of the problems and some foreseeable consequences are:
- A number of VM versions are used by Designers/QA
- Are we all running the latest VM version?
- What if something was missing? Re-iterate?
- New requirements/configuration changes?
- Response time for bugs/fixes
- Did somebody say UPDATES?
- Not agile enough
In an interesting note my team thought that my chat was about some tools but that was just a little bit of the whole equation. The end of my presentation was to change our development culture optimizing our development process.
As for the VM creation what I presented was:
- Do all of these programmatically
- In a secure and consistent way
The VM creation was just the beginning of the changes chain I had been working on. The next part was about provisioning and environments. Using tools like Chef and Vagrant. What I demoed to the team was how I bootstrap a whole piece of our stack from scratch and I chose the most tedious one which happens to be also the one where it was easy to forget pieces of configuration.
I also show them the code behind all this configuration magic. Some of the ideas I touched were:
- We can abstract our architecture and store it in our code repository
- Where the differences between development and production environments are minimal and known
- Free some of the team’s time and allowing us to:
- Focus on new features/requirements
- Solve issues/bugs
- Focus more on Coral’s platform and less on all the hosting tasks
- Optimizing human and computing resources
But it’s more than just the tools. Everyone in the organization has to get involved. It is not just about what the developers or the guys in operations do to find common ground. The idea is to help our organization to become more responsive to changes when they arise and streamline all the areas from development to production.
It was fun
It was fun to see the team attitude change from what they thought it was a meeting about tools to after the demos.
They look exited about what we could achieve in the following sprints. Even all our business wing was asking away about it.
The demos I covered were:
- Create VM templates on demand
- Configure VMs/Servers and our stack on demand
- Deploy desired Applications
- Configure Applications
- Grant dependencies
- Run required services
- Deploy VMs on demand on ESXi/Fusion
About the end of the presentation we chatted about closing the gaps between Production/QA/Development.
I will try to post some tutorials on how we use these tools perhaps it will spark some ideas for your own process.