In the modern technology field, buzz words come and go. One day databases are being discussed as the new best thing in the world of Agile Development only for the next, to recenter the importance of programming languages, frameworks, and methodologies.
But, one unchanging aspect of this lifecycle are the people who are an irreplaceable part of the creation, demise, and popularity of any given technology. This modern day world calls for close to perfection execution, of which individuals cannot always account for.
How does this call for flawless mechanisms affect the developers and creators, when called to building perfect products?
Automation is the technology by which a process or procedure is performed with minimal human interference through the use of technological or mechanical devices. It is the technique of making a process or a system operate automatically. Automation crosses all functions within almost every industry from installation, maintenance, manufacturing, marketing, sales, medicine, design, procurement, management, etc. Automation has revolutionized those areas in which it has been introduced, and there is scarcely an aspect of modern life that has been unaffected by it.
Automation provides a number of high-level advantages to every aspect of practice, making it an important process to have a working knowledge.
Removing Human Error
Automation, automation, more automation — and of course throw in some orchestration deployment and configuration management. Leaving the buzz words behind the “new technology frontier”, is removing human error. This translates to removing the dependencies of tribal knowledge when it pertains to application and system administration job duties.
Those job duties are performed in a repetitive fashion. The job duties are usually consolidated into various custom scripts, leaving a lot of those scripted actions with the ability to be boxed up and reused over and over again.
Steps To Deployment
The primary cornerstones to prepping an automation deployment for an individual server, follow a near identical framework:
- Download and Install the various languages and/or framework libraries the application usages
- Download, Install, and Configure the Web server that the application will use
- Download, Install, and Configure the Database that the application will use
- Test to see if all the steps are installed and configured correctly
Running application tests ensure that the deployment is running as expected. Testing is crucial to the successful run of the deployment.
For example, something simplistic but highly catastrophic is the possibility of a typo. Consider the case of the following code:
- cd /var/ect/ansible; rm -rf *
but instead a developer forgot the cd execute command and only ran
- rm -rf /
In this case, the whole drive is at risk to be erased — which can and will make or break a product.
Taking time to ensure the correct command executions, can determine the overall success of a system.
No Hidden Knowledge
Looking back on the steps to deploy an application to an environment, there are inevitably a number of small intermediary steps involved. A leader’s priority should be the revelation of each one of these unique sub-categories and effectively bringing all engineers around them up to speed on the associated best practices.
The information should be a source of truth maintained in a repository database, that is easy and intuitive to leverage
Popular Implementation Technology Options
What does a source of truth entail? Can one not skip the documentation of information and go straight into the execution of the steps onto a given system? Or create scripts to reconfigure the application if there was ever a need to? Those questions have been proposed several times and solutions have been formulated several times into the form of extensive and comprehensive build tools/frameworks.
These tools are used throughout the industry to solve the problem of orchestrated development, configuration automation, and management.
Furthermore, DevOps tools such as: Puppet, Chef, and Ansible are well matured automation/orchestration tools. Each tool will provide enough architecture flexibility to virtually handle any use case presented.
Puppet
Puppet was the first widely used Configuration Automation and Orchestration software dating back to its initial release in 2005. Puppet uses the Master and Slave paradigm to control X amount of machines. The Ruby language is the script language say, for executing commands in a destination environment.
The “Puppet Agents” (Slave) are modularized distinct components to be deployed to a server. This can be used for the creation of the server (ie. web server, database, application) in its destination environment. The “Puppet Enterprise” (Master) is comprised of all the inner workings to manage, secure, and organize agents.
Puppet Documentation
- https://puppet.com/docs/
- http://pub.agrarix.net/OpenSource/Puppet/puppetmanual.pdf
- https://www.rubydoc.info/gems/puppet/
Chef
Chef is somewhat similar to Puppet. The core language used within Chef’s abstract module components is Ruby. Chef has several layers of management for individual infrastructure automation needs. The Chef workstation is the primary area for managing the various Chef components. The Chef components consist of “cookbooks”, “recipes”, and “nodes”.
“Recipes” are collections of configurations for a given system, virtual, bare metal, or cloud environment. Chef calls those different environments “nodes”. “Cookbooks” contains “recipes” and other configurations for application deployment and control mechanisms for the different Chef clients.
Chef Documentation
- https://docs.chef.io/
- https://www.linode.com/docs/applications/configuration-management/beginners-guide-chef/
Ansible
Ansible is the newest mainstream automation/configuration management tool on the market. Therefore, Ansible uses more modern programming languages and configurations concepts and tools. Python is the programming language used in this framework. One of the modern and fastest up-and-coming template languages is YAML. YAML is programming language agnostic and is a subset of the ever so popular JSON. YAML is used within Ansible to describe an Ansible Playbook.
Ansible Playbook contains the steps that need to be executed on a given system. Once the Ansible Playbook is intact, configuration or further manipulation of the host can be executed through Ansible API — which is implemented in Python. There are several other components within Ansible technology such as modules, plugins, and inventory.
Ansible Documentation
- https://docs.ansible.com/ansible/2.5/dev_guide/
- https://devdocs.io/ansible/
- https://geekflare.com/ansible-basics/
Closing Thoughts
After covering a couple of the Configuration Automation and Development tools on the market, one can see a vast amount of flexibility available in eliminating those repeatable steps from human error. This software’s framework promotes reusable software within an organization — which is the most viable. The ability to scale an application development environment and environmental infrastructure is critical.
The learning curve may be deeper than using plain bash scripts, but the structure and integrity of using a proven tool and ease of maintenance outweigh the learning curve.