Distributed Ravel configuration via etcd
npm install ravel-etcd-config      
Ravel has a managed configuration system which is traditionally supplied values via a .ravelrc file. While this is convenient for development, production deployments with replicated Ravel apps benefit from utilizing a distributed configuration approach. To that end, this module provides a mechanism for loading configuration parameters from etcd, a popular open-source key/value store which is often utilized for this purpose.
This module can be used with any version of etcd which supports the v2 API (this includes etcd 3.x).
Load parameters into a folder in etcd using the tool or language of your choice:
``bash`Notice that parameters live within the ravelrc directory by default,
and that parameter names with spaces are supported.
$ etcdctl set "/ravelrc/redis host" 1.2.3.4
$ etcdctl set "/ravelrc/redis port" 6379
$ etcdctl set "/ravelrc/my object parameter" "{\"a\": 1, \"b\": 2}"
Then consume the parameters in your Ravel application:
app.js
`javascript`
const app = new require('ravel')();
const EtcdConfig = require('ravel-etcd-config');
new EtcdConfig(app);
// OPTIONAL: set connection host. It'll hit 127.0.0.1:2379 by default.
app.set('config etcd host', 'http://1.2.3.4:2379');
// OPTIONAL: set connection parameters. {timeout: 5000} by default.
// see https://github.com/stianeikeland/node-etcd for options
app.set('config etcd options', {timeout: 1000});
// ... other providers and parameters
app.modules('./modules');
app.resources('./resources');
// ... the rest of your Ravel app
app.init();
app.listen();
If you wish to utilize a unique directory name for your configuration parameters, or even load parameters from multiple directories, you can supply a name manually:
`bash`Notice that parameters live within the ravelrc directory by default,
and that parameter names with spaces are supported.
$ etcdctl set "/ravelrc/redis host" 1.2.3.4
$ etcdctl set "/customer1/redis port" 6379
$ etcdctl set "/customer1/my object parameter" "{\"a\": 1, \"b\": 2}"
.ravelrc
`json`
{
"config etcd host": "http://1.2.3.4:2379",
"config etcd options": {
"timeout": 1000
}
}
app.js
`javascript``
const app = new require('ravel')();
const EtcdConfig = require('ravel-etcd-config');
// in this example, .ravelrc configures etcd and all other params are loaded from there
new EtcdConfig(app); // this loads from /ravelrc by default
new EtcdConfig(app, 'customer1'); // this will load from /customer1
// ... other providers and parameters
app.modules('./modules');
app.resources('./resources');
// ... the rest of your Ravel app
app.init();
app.listen();