I received a comment on an earlier post asking “what are the possible advantages of chef on windows?”
I was originally going to just respond to that question directly but I feel the question opened up a bigger question as to why use a configuration management solution at all. See the original comment here Dissection of a chef recipe or two for windows
So I thought I’d post my top 10 reasons for using a configuration management solution.
So here they are with at least one qualifying statement for each ( Each reason could be a blog post I itself ). In no particular order of why a configuration management solution is important in these days of cloudy scalable / elastic solutions :
Automation: Being able to automate the provisioning and configuration of systems reduces the risk of error; frees up time spent by the team responsible for configuration for other tasks and provides a reproducible way of setting up systems. Automation is key to being able to deliver a self healing, elastic solution.
Reproducibility: Knowing that every time you deploy another instance ( or VM ,server etc) it will be exactly the same as the previously deployed instances so will behave exactly the same provides a degree of confidence . You can provision and configure a test environment that can actually mirror the production environment apply changes to that environment knowing that there are no differences ( apart from say connection string changes ) between that and the production environment so providing the nirvana of the test environment being an identical mirror of the production environment.
Platform agnostic: Being able to create configuration scripts that can be deployed to targets hosted on different platforms e.g using Rackspace instead of AWS as an example means there is no vendor lock in. The work will be around how to integrate with the new platform.
Improves support: Knowing exactly how a n instance was configured i.e. what was done in what order and being able to spin up a mirror environment provisioned and configured exactly the same way to test fixes on is just brilliant from a support perspective no flaffing around trying to figure out what exactly has been run in what order you can just focus on the problem at hand quicker .
Auditing of configuration: The ITIL definition of configuration management is:
The process of identifying and defining the Configuration Items in a system, recording and reporting the status of Configuration Items and Requests For Change, and verifying the completeness and correctness of Configuration Items.
The use of a configuration management solution addresses this requirement.
Change control: Being able to apply a specific configuration is useful in certain situations maybe the latest configuration update has a problem so being able to apply a known good state i.e the ability to roll back like you can with an application. I know many a time I’ve wanted to be able to do that
Scalable: Being able to scale up or down within minutes. Knowing that the new instances /servers etc will be identically configured as the existing running instances/servers
Cost effective: In terms of requiring less resources in maintaining the environment and reducing support effort
Can build upon typical system skills: Any decent configuration management system will be capable of taking advantage of what the target O/S offers so on windows you will expect to be able to leverage Powershell.
Centralised Repository: A good starting point to understand the status of your environment e.g what instances/ servers are undertaking what role. What configuration scripts have been applied in what order, up time and other useful info such as IP addresses etc