I (Paul) have most likely directed you here because I'm trying to sell you "app config backed by source-control", which I claim is the gold standard of such things. Note: Apps in this context are the things you wrote source for that and are truly unique; they are not infrastructure packages like Postgres, Tomcat or Apache which also have config.
For for the purposes of this demo, Feature Toggles is the configurable thing that we're going to show. CMS, Biz Rules, ETL, BPM, Case Mgmt Workflows are all "configurable" things for a platform, that might be maintained within the same system, but toggles are what we're showing here, and not just on/off ones.
Application Configuration App
App-Config-App stores shared config into source-control. This suits one branch per environment and merge point tracking as a way of being assured of correct config promotion.
It makes config available over HTTP as JSON.
It provides editing of config, using AngularJS (without a schema), and exposes a 'commit' button in the web page to handle the interop to/from source-control for you.
It is also "round-trip" in that you can also check-out the JSON source files using regular command line tools, edit, and commit back, without using the web UI.
Ports to different source-control back-ends
Two working implementations so far:
Git + Github version of app-config-app is on a 'git' branch (Rather a rudimentary version, that serves as the proof of concept)
Perforce version of app-config-app is on a 'perforce' branch (fellow ThoughtWorker Logan McGrath did the work, with I was Product Owner and P4 tech consultant)
One half-working implementation too:
- Is carriage return delimited text
- Terse diffs (if pretty printed consistently)
- Suits branching
- Audit-Trail is helpful
- Permissions per-branch or even subdirectory (not all impls)
- Rollback is atomic
- Maintained Divergence can be deliberate
Timeline of Blog entries talking about this
- http://paulhammant.com/2012/08/14/app-config-using-git-and-angular http://loganmcgrath.com/blog/2012/11/07/using-perforce-chronicle-for-application-configuration
- http://loganmcgrath.com/blog/2012/11/20/app-config-app-in-action - features a video showing the setting of toggles thru the admin app, and how that affects the "server" in question
- http://loganmcgrath.com/blog/2012/11/28/promoting-changes-with-app-config-app - screen shots of the promotion (merging as done by Perforce)
Invariant Technologies between ports
Sinatra (Ruby): serverside templating tech.
Knockout, Batman, VueJs could have been used instead of AngularJS, and any server-side templating tech could have been used instead of Sinatra.