2.0.2 • Published 1 year ago

backendless-consul-config-provider v2.0.2

Weekly downloads
207
License
ISC
Repository
-
Last release
1 year ago

Consul Config provider for Backendless' JS Servers

Install

npm i backendless-consul-config-provider -S

How to use

Example

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:

//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"
    }
  }
}
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:

const BackendlessConsul = require('backendless-consul-config-provider')

BackendlessConsul
  .provide({
    ...
    version: require('./package.json').version
  })
  
2.0.2

1 year ago

2.0.1

1 year ago

2.0.0

1 year ago

1.0.17

3 years ago

1.0.16

3 years ago

1.0.15

3 years ago

1.0.14

4 years ago

1.0.13

5 years ago

1.0.12

5 years ago

1.0.11

5 years ago

1.0.10

5 years ago

1.0.9

5 years ago

1.0.8

5 years ago

1.0.7

5 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago