Giter Club home page Giter Club logo

config-mgmt's Introduction

Configuration Management

Almost every component of every service requires configuration. There are many many methods to configuring a solution, but there are some important tenants that should be observed:

  1. Configuration should be validated and conformed on startup. It is beneficial to terminate the execution of our service during startup when it has an invalid configuration, before it starts processing requests. When validating, the configuration should also be conformed to the expected datatypes and ranges. When the configuration value do not conform, it should fail validation or use a default.

  2. Configuration should be logged on startup. When troubleshooting issues with the service, it can be invaluable to look at the startup logs to see how the service was configured. While we do not want to show secrets, it is still important to show whether the value is set or not.

  3. Configuration should support secrets in a safe way. This solution should enable developers to store secrets easily and safely. It should make it easy to do the right thing.

  4. Configuration should be easy for administrators to set properly. There are several considerations here:

    • Configuration values should have reasonable defaults whenever possible.
    • Very specific configuration values may derive from more generic configuration values. For instance, if there are 4 places in the code that need a retry interval, consider using 4 configuration values that all default to using the value of a single configuration value.
    • Consider allowing for "templates" or "modes" that can be set as a single configuration value that sets many other configuration values.
    • Configuration values can interact with one another. For instance, if one value is true, other values may be required. These more complex validations should be enforced.
    • Configuration should be documented extensively and clearly.

Why Implement a Configuration Management Solution?

There are some configuration management solutions available, but it is rare to find a solution that meets all of the tenants above. No cross-platform, cross-language solution has been found that provides consistency and meets the requirements.

Contribution

This documentation will serve as a schematic for a cross-platform, cross-language solution. As CSE developers have a need for a configuration management solution in a particular language, please contribute to this repository with a solution that adheres to the schematic.

The schematic will be versioned so that it can be clear to users of this solution which features are available in which versions.

Schematics

The schematics will serve as a guide on how to implement the solution across languages. In general, capabilities and syntax should be as consistent as possible. It will not address how components are registered for use (ex. dependency injection), how they are configured (ex. the URL of an AppConfig instance), how they authenticate to external services, etc. as these can vary per language. There will be language-specific guides for these topics.

config-mgmt's People

Contributors

plasne avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.