I'm going to start toying with an idea for a new project. It's a micro-sized configuration manager that's meant to work perfectly for containerized or packaged apps. Somehow, I settled on the name
calvin. (Because there aren't enough configuration management standards already...)
Here's some documentation on
calvin - a configuration tool.
calvin is a relatively simple configuration tool that allows for the super simple setup of applications.
it is currently targeted toward simplifying configuration of containerized applications.
calvin operates against a series of backends with special formatters to pipe config data in to or out of a storage database.
the concept is similar to most config management, except for the fact that calvin isn't file-based, nor
is it a pain to set up. in most cases, it's run-once-and-done. sometimes, you may find yourself needing
to reconfigure a container app...just make the change with calvin and then restart your app. calvin will
run before your app and generate your app's config before handing execution over to the app.
to start, we will implement Redis as the configuration storage backend, since it's fast, simple, and
over time, more backends will be added to enhance security or provide further features.
mutators take config data from a file and mutate it into a form that calvin can easily store in a backend.
typically, the output from a mutator will be a dictionary or some other iterable.
mutators should not only be able to generate a dictionary from a config, but also generate a config from a dictionary.
command line tools
calvin will have a main entry point: the
from the main script, you will be able to:
- [ ] Trigger a pull:
calvin pull --backend <backend> <config>
- [ ] Push a config through a mutator and to a backend:
calvin push --backend <backend> --mutate <config type> <config name> < config-file.txt
- [ ] Dump a pretty view of the config in tree-ish form:
calvin dump --backend <backend> <config>
- [ ] Get a config value from a config:
calvin get --backend <backend> <config> <key>
- [ ] Set a config value:
calvin set --backend <backend> <config> <key> <value>
calvin may also support setting config or config value metadata, depending on the backend used.
Redis gives us the advantage of expiring keys (for time-sensitive / secret config data) which may be useful.
- [ ] Documentation
- [X] README
- [ ] Important Stuff
- [ ] Backends
- [ ] Redis
- [ ] Postgres
- [ ] ????
- [ ] Mutators
- [ ] Ini format
- [ ] Malibu extended ini format (?)
- [ ] Yaml
- [ ] JSON
- [ ] Msgpack...?