UNPKG

backendless-consul-config-provider

Version:

Consul Configs provider for Backendless' JS Servers

164 lines (139 loc) 3.5 kB
# Consul Config provider for Backendless' JS Servers ## Install ```` npm i backendless-consul-config-provider -S ```` ## How to use ### Example ````js const BackendlessConsul = require('backendless-consul-config-provider') BackendlessConsul .provide({ url : 'http://localhost:8500', rootKey : 'config/service-name/', extraKeys: { key1: '{version}/path/to/value1', foo: { bar: '{version}/path/to/value2' }, }, version : '5.0.1', }) .then(consulConfig => console.log('Consul Config:', consulConfig)) ```` ### Options #### url: It's Consul Server URL #### rootKey: It's path to Service's Config, will be loaded the whole tree For example we provide `config/some-service` as `rootKey` and there is the next structure: __Consul stricture:__ ```` 5_0_1 |- config |- some-service |- key1 = value1 |- key2 |- key3 = value3 |- key4 |- key5 = value5 ```` __As result we will have an object:__ ```` { key1: value1, key2: { key3: value3, key4: { key5: value5 } } } ```` #### extraKeys: It's map of shared Config which can be placed by any keys For example we have some shared config which used in Service-A and Service-B, the option helps us to get it You can also use `{version}` in path to shared value, before retrieve it will be replaced by passed `version` value __Consul stricture:__ ```` global |- some-config |- key1 = value1 |- key2 |- key3 = value3 5_0_1 |- config |- key4 = value4 |- key5 |- key6 = value6 |- key7 = value7 ```` __Extra Keys Map__ ```` { prop1: "global/some-config/key1", prop2: { prop3: "global/some-config/key2/key3", prop4: { prop5: "{version}/config/key4", prop6: "{version}/config/key5/key6", prop7: "{version}/config/key5/key7", } } } ```` __As result we will have an object:__ ```` { prop1: value1, prop2: { prop3: value3, prop4: { prop5: value4, prop6: value6, prop7: value7, } } } ```` It can be stored in `json` file for most flexible, for ex: ````json //consul.json { "apiHost": "{version}/config/server/host", "apiPort": "{version}/config/server/port", "notification": { "server": "{version}/config/notification/smtpServer", "port": "{version}/config/notification/smtpPort", "errorRecipient": "{version}/config/notification/emails" }, "redis": { "cache": { "host": "{version}/config/redis/cache/host", "port": "{version}/config/redis/cache/port", "password": "{version}/config/redis/cache/password" } } } ```` ````js const BackendlessConsul = require('backendless-consul-config-provider') BackendlessConsul .provide({ ... extraKeys: require('./consul.json') }) ```` #### version: It's version of Service's Code, the config version must be the same. The package will load current config version in Consul by key `global/version/product` and if there is wrong version it will wait a few seconds and retry again. Once both Config and Code versions are equal the package get start retrieving config The best way to keep the option up-to-date it's pass there version from `package.json`, like this: ````js const BackendlessConsul = require('backendless-consul-config-provider') BackendlessConsul .provide({ ... version: require('./package.json').version }) ````