Definitions and Terms
- Configuration Management - (pg 31) - Processes by which all artifacts relevant to your project, and the relationships between them, are stored, retrieved, uniquely identified and modified.
- Configuration - (pg 39) - information that can be used to change the behavior of software at build time, deploy time, and run time.
- Environment - (pg 49) - The hardware, software, infrastructure, and external systems an application depends on in order to work
Answers the questions
- What constitutes a particular version of your software?
- What was done by whom; when and why?
- Everything that could change in your application stored in a controlled manner
- Check in regularly (this is not a problem with git anymore methinks)
- Use good commit messages
- Ultimate configurability vs Single purpose software
- Configuration adds complexity
- Configuration is hard for authors to think about
Types of Configuration
Questions to answer
- How to represent?
- YAML, XML, Database
- Version control, database, registry
- How do deployment scripts access this?
- Database, YAML, HTTP; via some interface, e.g.,
- How does it vary between environments?
- Per Application, version, environment
- Smoke test during deployment for external systems
- Smoke tests for applications to confirm deployment
Manual environment configuration
The worst approach to managing configuration information is to deal with it on an ad-hoc basis.
- Environment creation should be a fully automated process
Environment configuration information
- Info to worry about
- OS version
- external services
- Basic Principals of Configuration
- Keep binary files separate
- Keep configuration in one place
- Third party software
- Can we deploy it
- Can we version it
- Does it fit into our automated deployment strategy
- Every change to the environment should be tested
- This section is out of date
- Puppet, CFEngine, Virtualization snapshots
- No manual changes
- Test should be the same as production and use the same process