Framework for using Consul as your project options storage
How often do you wonder where to store the project settings? When your project is small it is not a big problem. But if your big project consists of dozens of microservices then there is a problem of centralized configuration management. The Сonsul have a key/value storage that is ideal for this.
With consul-options you can define and use options in your code by a simple and elegant way. Just take a look at the example:
class DB(ConsulKV): pass class Users(DB): host = '127.0.0.1' port = 5432 user = 'postgres' password = 'postgres' dbname = 'users' class Orders(DB): host = '127.0.0.1' port = 5432 user = 'postgres' password = 'postgres' dbname = 'orders'
Now you can access option values in a clear way:
from consul_options import options print options.db.users.host print options.db.orders.dbname
consul-options automagically creates folders and keys with default values defined above in Consul and later read them from there. So if anyone will change the value of db/orders/host key to something different in Consul then you will get that value.
How project options stored in Consul
When you declare a new class based on ConsulKV default bahavior is creation a folder in Consul key/value storage with name of your class in lowercase. Each class attribute you define will have mapping to key folder/key. If you don’t agree with generated folder name you are free to choose any other with reserved class attribute __key__ as shown below:
class WorkerOptions(ConsulKV): __key__ = 'worker' host = '127.0.0.1' port = 80
After that you can access to the option with “worker” in path:
from consul_options import options print options.worker.host print options.worker.port
To create hierarchical key structure you can take advantage of usual class hierarchy:
from consul_options import ConsulKV, options class WorkerOptions(ConsulKV): __key__ = 'worker' host = '127.0.0.1' port = 80 class DB(WorkerOptions): host = '127.0.0.1' port = 5432 user = 'postgres' password = 'postgres' print options.worker.db.host # 'host' print options.worker.db.port # 5432
It is also possible to create keys at root level with class attribute __root__:
class RootOptions(ConsulKV): __root__ = True host = '127.0.0.1' port = 80 print options.host print options.port
consul-options is compatible with both Python 2 and Python 3.
Use pip to install:
$ pip install consul-options
consul-options is developed and distributed under the Apache 2.0 license.