Skip to content

Instantly share code, notes, and snippets.

@jesjos
Created May 21, 2018 20:05
Show Gist options
  • Save jesjos/16eb7e12016526c99265e74587033f23 to your computer and use it in GitHub Desktop.
Save jesjos/16eb7e12016526c99265e74587033f23 to your computer and use it in GitHub Desktop.

Traits of a desired configuration management system

  1. Supports different named environments, e.g “some-customer-production”, “other-customer-test”
  2. Environments should be able the include properties from other environments. E.g. test environments for all customers could include properties shared among all test environments.
  3. All properties can be overridden using environment variables.
  4. Properties can be set using files.
  5. Properties can be inspected. A CLI utility prints the complete configuration for an environment. Bonus: a web interface as well.
  6. The source of a property can be inspected. E.g. the CLI utility prints “KEY=VALUE (some-file.yml)” or “OTHER-KEY=OTHERVALUE (ENV)”
  7. Configuration can be changed at runtime. Apps may still choose to only read the property at startup, but the CMS supports live updates.
  8. Configuration can be wrapped and shipped as a module to be shared between apps
  9. Configuration can be read from CLI scripts, e.g. bash
  10. The system shall integrate with frameworks like Spring. For example set spring.datasource.url using the CMS.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment