DevOps: Configuration Management

What Configuration Management Is

Configuration Management is an approach for maintaining control and consistency across elements of large infrastructures. It’s a software solution that allows each server to be assigned certain functionality roles that dictate the software and configuration changes made to the server. Configuration Management (CM) provides a known state for each of the managed nodes, so it’s easier to apply or track changes that are made.

Benefits of a Typical Configuration Management Approach

Consistency with Configuration Management

One of the biggest benefits of managing configurations properly is consistency of the results you get. Having spent once a certain time capturing your server state in a number of automation scripts, you then use the configuration management solution to apply the same configuration to the potentially large number of similar servers. Configuration management software will cleverly apply your settings to each server in accordance with the defined server roles.

Consistency Between Environments

Your infrastructure probably has a number environments with similar setup – test/dev, stage and production.

CM solutions make the task of transitioning your development and deployment process from one of the environments to the next very easy. Done properly, you get to the level of automation that only need the name/tag of an environment changed from “stage” to “prod” – the rest of deployment will work, correctly applying respective configurations to relevant parts of your infrastructure.

Accurate Record Keeping

Confirming installed versions of software packages, lists of active users, names of nodes or clusters in your environment and obtaining lots of other real-time and historical data about your infrastructure gets much easier with Configuration Management software.

Scalability with Configuration Management.

Another common benefit is the easily achievable scalability of your business processes and infrastructure when you use configuration management software.

Compared to the manual processes of building servers or virtual machines, a standardised configuration management solution will provide cost and time savings when deploying large numbers of servers.

You need to spend extra time documenting and capturing desired server state in configuration manager during the first run of your deployment, but this will pay off when you easily apply the same settings to many servers in the future.

Risks with Configuration Management

There aren’t that many things that can go terribly wrong when you design your configuration management properly and following best practices suggested by each vendor, but here’s a few of the more obvious risks:

  • Unresolved/untested deployments break software. If you are relying on custom built packages or source code for deploying applications, you run a risk of breaking some dependencies by installing a different version of a key software component. Most configuration management solutions allow for defining implicit dependencies, so you can minimise such risks with relatively little effort.
  • Automated package management could lose data. It’s very important to configure your software in a way that stores data outside of the default locations that may be auto removed when a package manager removes a software package before installing a newer version. The same is true for configuration files – if your install depends on customisations to a default file of some standard software package, your configuration management scenario must include not only the package install but also the configuration file copy from external storage.
  • Wrongly applied roles or environment names could reconfigure (and break) test or even production environments. It is therefore very important to use peer review in all the key changes to both software and configuration that your teams produce and manage.

Difference between DevOps and Software Configuration Management

Although both terms come up quite regularly when researching the same topics, they are not the same.

DevOps is both a methodology and a concept. It covers a broad number of practices and solutions aimed at building and maintaining a tightly integrated software development and delivery process with emphasis on communication and collaboration between product management, software developers and operations teams.

Configuration Management solutions like Puppet, Chef or Ansible are very likely to be part of the DevOps practices in your team, but CM is only one of the many solutions in your IT toolchain.

DevOps is not possible with just the help of Configuration Management, your organisation would need to use many other software solutions to truly embrace DevOps.

On the other had, Configuration Management is such a wide spread element that it’s practically inseparable from DevOps. So if you’re joining an IT organisation with strong focus on DevOps, you’re pretty much guaranteed to use Configuration Management along with other approaches.