consul-conf
Version:
63 lines (57 loc) • 1.68 kB
JavaScript
var consul = require('consul');
function Conf(host, port, service_name, container_name, env, token, scheme) {
var host = host || "localhost";
var port = port || 8500;
var service_name = service_name || 'HelloWorld';
var container_name = container_name || 'default';
var env = env || 'local';
var token = token || null;
var schema = schema || "http";
var config_url = service_name + '/' + container_name + '/' + env; // || "iplexus/default/local";
var client = new consul({
host: host,
port: port,
token: token
});
var createNestedObject = function(base, names, value) {
var lastName = arguments.length === 3 ? names.pop() : false;
for (var i = 0; i < names.length; i++) {
base = base[names[i]] = base[names[i]] || {};
}
if (lastName) base = base[lastName] = value;
return base;
};
this.get_all = function(cb) {
cb = cb || function() {};
var config = {};
var self = this;
var flag = 0;
client.kv.get({
key: config_url,
recurse: true,
token: token
}, function(err, kvs_data) {
if (err) {
cb(err);
};
if (!kvs_data) {
return cb(null, config);
}
for (var i = 0; i < kvs_data.length; i++) {
var keys = kvs_data[i].Key.replace(config_url, '').split('/');
value = kvs_data[i].Value;
++flag;
if (value) {
try {
value = JSON.parse(value);
} catch (e) {}
createNestedObject(config, keys.slice(1, keys.length), value);
if (flag == kvs_data.length) {
cb(null, config);
}
}
}
})
}
}
module.exports = Conf;