Learning from the automation pros
During my apprenticeship as an System – Administrator i started to fall in love with the Dev-Ops movement. And i did some little integration automation with: https://blog.jonaka.de/testing-linux-packages-with-docker/ This love shouldn’t stop when i moved to project management.
At various DevOps Meetups I met a bunch of highly skilled DevOps Engineers, Sysadmins, Developers and and other IT Professionals that seemed to religiously follow a dogma of “automate all the things!”, And with “all the things” they mean really “all the things” and even automating their jobs.
If there was something they had buildt, they wanted to be able to reproduce this – with an working artefact – or not. Reproducability, without manual intervention, i soon understood, was the key to the possibility of doing iterative approaches in building complex software products and especially deploying in complex architectures.
Manual Labor in an automated world
When i first joined the project management team for ownCloud our consultants would have to complete the following steps just to be able to get our application running in any customer environment:
- Install php
- Configure PHP
- Install a webserver
- Configure the Webserver
- In some cases install a database
- Configure the database
- Do a basic server hardening
- Install a redis server
- Configure the redis server
- Install a local caching mechanism
- Configure the local caching mechanism
- Mount the storage / ensure it is correctly connected.
As you see, these are already 12 steps. In detail though, in each step the consultant might have to take care for up to 10 different parameters.
So we are not talking about 12 steps, but likely something around 60 or more until you have the base for a reliable deployment of our software on top of the LAMP stack.
And these 60 steps/configs differ also from linux distribution to linux distribution.
The first thing that came to my head was: this is insane. You can’t do that by hand reasonably. Especially in a situation where the customer is looking over your shoulder, or you are in a remote screen session with him. If you are unsure on one configuration, you have no possibilty to check with your colleagues to get feedback.
Also 60 little configurations and tweaks, are inviting to forget one of them or are just error prone when all handled by one person.
Our Consultants and Dev Ops specialists spent actually more time on shaping an functioning environment than installing and configuring our own software to the customers needs.
I introduced and pushed for an deployment and configuration automation tool and the team started to develop together on https://github.com/owncloud-ansible.
This covers most of the basic roles needed for deploying ownCloud. It’s open source and you are more than welcome to contribute.
When confronted with large and complex infrastructure you want to be able to reproduce the customer infrastructure at least to a certain extent to be able to reproduce or exclude issues. Also you want to make sure that you can identify changes in the configuration that resulted in unwanted behaviour. When you have Infrastructure as Code and Configuration as code you will be able to determine with which patch or commit breaking changes happened and you shorten the time of debugging issues.
Tools to check on:
If you are interested in automating your configurations I recommend to check out: https://www.ansible.com/
I am just getting familiar with terraform: https://www.terraform.io/
and i must admit it is love at the first sight.
I guess a mix between ansible and terraform will be able to resolve almost all of your automation desires for deployments and configurations.
What are your favorite Dev Ops tools and experiences? Leave a comment and lets chat!