consul.kv.set(args.key, args.value, function(err, result) {
done(err,{});
});
}
function cmd_get( args, done ) {
consul.kv.get({key:args.key,recurse:false}, function(err, result) {
if( err ) {
done(err);
}
else {
done(null,{value:valueProperty(result || {})});
}
});
}
function cmd_remove( args, done ) {
consul.kv.del({key:args.key,recurse:args.recurse || false}, function(err) {
done(err,{});
});
}
function cmd_list( args, done ) {
var keyPath = buildKeyPath(args.key);
consul.kv.keys({key: keyPath}, function(err, result) {
if ( !err || err.message === 'not found') {
result = _.chain(result || []);
var childFilter = args.recurse ? allChildren: immediateChildrenOnly;
var keys = result.invoke("substring",keyPath.length)
.filter(childFilter).value();
done(null,{keys: keys});
}
else {
done(err,null);
}
})
}
seneca.add('init:registry-consul',function(args,done){
consul = consulReq(options);
done();
});
return {
name:"registry-consul"
};
};
function buildKeyPath( searchKey ){
return endsWithSlash(searchKey)? searchKey : searchKey+"/";
}
function endsWithSlash( searchKey ){
return searchKey.indexOf("/", searchKey.length - 1) === searchKey.length -1;
}
var allChildren = _.constant(true);
var immediateChildrenOnly = function( keyName ){
return keyName.indexOf("/") === -1
};