denver
Version:
Create layers of ENV variables saved to etcd and deploy docker containers using them
203 lines (156 loc) • 4 kB
JavaScript
var program = require('commander');
var denver = require('./index');
var version = require('./package.json').version;
var concat = require('concat-stream');
var async = require('async');
function get_denver(){
var settings = {
host:process.env.DENVER_HOST || program.host || '127.0.0.1',
port:process.env.DENVER_PORT || program.port || 4001,
key:process.env.DENVER_KEY || program.key || '/denver'
}
var den = denver(settings);
return den;
}
function get_stacks(command){
var args = process.argv;
var stacks = [];
var commandhit = false;
args.forEach(function(arg){
if(commandhit){
stacks.push(arg);
}
if(arg==command){
commandhit = true;
}
})
return stacks;
}
program
.version(version)
.option('-k, --key <string>', 'etcd port', '/denver')
.option('-p, --port <port>', 'etcd port', '4001')
.option('-h, --hostname <hostname>', 'etcd host', '127.0.0.1')
.parse(process.argv);
program
.command('get <stack> <key>')
.description('read a value from a stack')
.action(function(stack, key){
var den = get_denver();
den.get(stack, key, function(err, value){
if(value){
console.log(value);
}
})
})
program
.command('set <stack> <key> <value>')
.description('write a value to a stack')
.action(function(stack, key, value){
var den = get_denver();
den.set(stack, key, value, function(err){
if(err){
console.error(err);
process.exit(1);
}
})
})
program
.command('ls')
.description('list the current stacks')
.action(function(){
var den = get_denver();
den.ls(function(err, stacks){
if(err){
console.error(err);
process.exit(1);
}
if(stacks && stacks.length>0){
console.log(stacks.join("\n"));
}
})
})
program
.command('rm <stack>')
.description('remove a stack')
.action(function(stack){
var den = get_denver();
den.rm(stack, function(err){
if(err){
console.error(err);
process.exit(1);
}
})
})
function printEnv(cmd){
return function(){
var stacks = get_stacks(cmd);
var den = get_denver();
den.env(stacks, function(err, env){
if(err){
console.error(err);
process.exit(1);
}
Object.keys(env || {}).forEach(function(key){
console.log(key + '=' + env[key]);
})
})
}
}
program
.command('env')
.description('print the environment for some stacks')
.action(printEnv('env'))
program
.command('print')
.description('print the environment for some stacks')
.action(printEnv('print'))
program
.command('docker')
.description('print the environment for some stacks in docker format')
.action(function(){
var stacks = get_stacks('docker');
var den = get_denver();
den.env(stacks, function(err, env){
if(err){
console.error(err);
process.exit(1);
}
var st = Object.keys(env || {}).map(function(key){
return '-e ' + key + '=' + env[key];
}).join(' ');
console.log(st);
})
})
program
.command('inject <stack>')
.description('inject new environment variables from a textfile')
.action(function(stack){
var stacks = get_stacks('docker');
var den = get_denver();
process.stdin.pipe(concat(function(inject){
var values = inject.toString().split(/\r?\n/).map(function(line){
return line.split('=');
})
async.forEach(values, function(arr, nextarr){
if(arr[0]){
den.set(stack, arr[0], arr[1], nextarr);
}
else{
nextarr();
}
}, function(err){
if(err){
console.error(err);
process.exit(1);
}
})
}))
})
program
.command('*')
.action(function(command){
console.log('denver version ' + version + ' - \'denver --help\' for more info');
});
program.parse(process.argv);