Configuration management (CM) is a systems engineering process for establishing and maintaining consistency of a product’s performance, functional, and physical attributes with its requirements, design, and operational information throughout its life. CM is the practice of handling changes systematically so that a system maintains its integrity over time. CM implements the policies, procedures, techniques, and tools that manage, evaluate proposed changes, track the status of changes, and maintain an inventory of system and support documents as the system changes. CM programs and plans provide technical and administrative direction to the development and implementation of the procedures, functions, services, tools, processes, and resources required to successfully develop and support a complex system.
Configuration management represents the one true source of the configuration items. A configuration item is anything that can be configured and that is absolutely necessary for the success of your project. For example, source codes, property files, binaries, servers, and tools can all be configuration items for a software firm.
In fact, the term configuration management means something or another in most industries. If you pick the automotive industry, for example, configuration management could refer to the configuration of the assembly line machines that are instrumental to manufacturing. Another configuration item could be the inventory of various automobile parts, as this would be configured early on in the development process.
In software development and management, configuration management refers to the items that need to be configured and managed in order for the project to be successful.
Configuration management, however, can have many connotations, depending on who’s discussing it. Most people in the software development industry refer to the source code management alone as configuration management. But, there is a whole lot more to configuration than managing source codes when it comes to DevOps.
Process of Configuration
The configuration management process takes into consideration the following broad-set activities:
- Configuration identification — The configuration that needs to be maintained must first be identified. It can either be a manual process, such as maintaining the source code on a common repository or using discovery tools to automatically identify the configuration.
- Configuration control — Once the configuration items are identified, there is no guarantee that it will remain unchanged. In all probability, the configuration is likely to change. Thus, there needs to be an effective mechanism to control the changes that go into the configuration management system. In most configuration management frameworks, the change management process acts as a guardian for controlling the changes to the configuration management system.
- Configuration audit — Despite there being control mechanisms protecting against changes in configuration, means of bypassing exist. Therefore, configuration audits are necessary to keep an eye on configuration compliance.
CM and DevOps
Configuration management encompasses the practices and tooling to automate the delivery and operation of infrastructure. Configuration management solutions model infrastructure, continually monitor and enforce desired configurations, and automatically remediate any unexpected changes or configuration drift.
DevOps spans across software development and operations phases. Therefore, it is only fitting that configuration management spans across both the areas.
Configuration management in DevOps is coined as “comprehensive configuration management” and is made up of
- Source Code Repository — Used primarily during the development phase. A source code repository is the primary container for all versions of code. Apart from keeping all the code, it generally stores test scripts, build scripts, deployment scripts, and configuration files as well.
- Artifact Repository — Used during the development and operations phases. An artifact repository is a database for storing binaries. Additionally, test data and libraries can be stored on it as well. Whereas a source code repository is meant to store human readable files, an artifact repository stores machine files. Every time a build is successfully run, the binary that gets generated is stored in the Snapshot repository. But not all of them get pushed into production unless the project adopts the Continuous Deployment methodology. The binary that gets pushed into the production is first moved into the Release partition before getting deployed into production.
- Configuration Management Database — Used during the development and operations phases. The CMDB is a repository of various infrastructure devices, applications, databases, and services. The CMDB is particularly useful when you are trying to make a change to any of the applications, databases or servers. CMDB in DevOps is used for environment provisioning.