ravel-etcd-config
v0.18.0
Published
Distributed Ravel configuration via etcd
Downloads
9
Readme
ravel-etcd-config
Distributed Ravel configuration via etcd
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
).
Example Usage:
Load parameters into a folder in etcd
using the tool or language of your choice:
# 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
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();
Advanced Usage:
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:
# 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
{
"config etcd host": "http://1.2.3.4:2379",
"config etcd options": {
"timeout": 1000
}
}
app.js
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();