In earlier days, system administrators frequently uses scripting to manage infrastructure. The whole point is to define the repeated tasks and automate it. It helped infrastructure management to a great extent. But it has some difficulties when changes are required more often and roll backing to past changes. Also the script is not user friendly and it difficult to maintain. When considering large infrastructures, scripting would be of no use in managing it.
Systems engineer needs something more than scripting to manage infrastructures. It should be more meaningful and manage large infrastructures in an efficient manner. Then a new concept, DevOps, arises from agile systems administration movement. It enhances system administration with various procedural approach and ITIL libraries. It includes better communication between the operation teams and developers and their required resources are obtainable in short span of time. Also the changes can be easily attained and it is more agile.
DevOps is not about specific tools, it is a culture which provides more automation and agility. One great thing which supports DevOps is the automation tools. Lot of automation tools are available in market to achieve specific kind of automation like change and configuration management, Continuous integration etc. They mostly uses a declarative language or sometimes a programming language to define infrastructure. They in most cases features version control which enables us to roll back any changes to the infrastructure.
In Change and configuration management, the systems are taken control after getting provisioned. A server acts as a central entity and collects all the systems and make it suitable for further automation process. In most cases, a client agent will be running on the client to which the server sends the instructions and in some cases there will be no agent daemons running in the clients, the server will login to the client by using some authentication mechanism like username/password combination or keys and then they will run the code directly on the machine.
Agent based configuration management system can handle complex infrastructure and can handle large number of systems. But a small agent daemon need to be always run in the client system. Agent-less configuration management systems don’t need any agent to be installed on client system, but it can handle only small number of systems as it needs to login to each system and execute the codes.
Also since the infrastructure here is defined as code (Infrastructure-as-code), it has all possibilities a normal programming language has. They can be version controlled using suitable svn. Therefore it allows us to switch to the infrastructure configuration we used in the past. Also few change and configuration management tools has more better language which supports object oriented programming. Although OOPS for a traditional programming languages has a whole new different advantages, in configuration and management system they are used to their ease of use, templates and well defined hierarchy.
For example, let say we need to setup a QA environment for web site testing. We need to setup different versions of apache in different systems. In traditional way, the system administrator usually writes a script to install the software and its dependencies. Since we need different versions we need different scripts to do it automatically. When there is newer version of apache or let’s say we also needs to install MySQL also in all the servers, install python modules in few webservers. Now they need to change the script and once again run it on all machines. But there is a more efficient way, Change and configuration management system. In Change and configuration management we can modify the particular apache template to include the additional modules and change the version numbers. Now every client is updated automatically to the latest template. Now if I don’t want those changes, I can simply roll back the changes to the code using SVN and then the environment is restored to previous version. This is more agile and more reactive.