backendless-consul-config-provider

    1.0.17 • Public • Published

    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
      })
      

    Install

    npm i backendless-consul-config-provider

    DownloadsWeekly Downloads

    205

    Version

    1.0.17

    License

    ISC

    Unpacked Size

    14.3 kB

    Total Files

    6

    Last publish

    Collaborators

    • valodya
    • stanislaw.grin