node package manager
Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

denver

denver

Denver

Travis

Create layers of ENV variables saved to etcd and deploy docker containers using them

installation

$ npm install denver -g

usage

denver will save ENV variables for a stack under a key in etcd.

it will merge stacks in order so one stack can inherit from another.

it will spit out stacks environment in a few useful formats.

api

var den = denver(options)

create a new denver object using the options:

  • host - the etcd host (defaults to 127.0.0.1)
  • port - the etcd port (defaults to 4001)
  • key - the base key (default to /denver)

You can always use the envrionment variables to set these values:

  • DENVER_HOST
  • DENVER_PORT
  • DENVER_KEY
var denver = require('denver');
 
var den = denver({
    host:'127.0.0.1',
    port:4001,
    key:'/denver'
});

den.set(stack, key, value, callback)

set a value for a stack

den.set('app1', 'test', 'hello', function(err){
    // value is written 
})

den.get(stack, key, callback)

get a value from a stack

den.get('app1', 'test', function(err, value){
    // value is here! 
})

den.ls(callback)

list all of the stacks

den.ls(function(err, stacks){
    // stacks is an array of stack names 
})

den.rm(stack, callback)

remove a stack from the db

den.rm('app1', function(err){
    // the app is gone 
})

den.env(stacks, callback)

get an object with the values for the environment that is created from merging the stacks array.

den.env([
    'basestack',
    'applicationstack'
], function(err, env){
    // env is an object that is a merged stack env 
})

You can also just get a single stack env:

den.env('app1', function(err, env){
 
})

events

den.on('set', function(stack, key, value){})

emitted when a value is set

den.on('del', function(stack, key, value){})

emitted when a value is deleted

cli

denver ls

List the stack names we have environments for

$ denver ls

denver rm

Remove a stack from the database

$ denver rm myapp

denver get

Print the value of a single environment variable

$ denver get myapp ADMIN_EMAIL

denver set

Write the value of a single environment variable

$ denver set myapp ADMIN_EMAIL bob@thebuilder.com

denver del

Remove a value from an environment

$ denver del myapp ADMIN_EMAIL

denver env

Print the whole environment for a stack

$ denver env myapp

You can 'merge' several stacks with the env command - this lets you have 'global' envs or whatever:

$ denver env defaultenv myapp

When you merge - the last stack will take precendence - so myapp -> ADMIN_EMAIL would overwrite defaultenv -> ADMIN_EMAIL.

You can merge as many stacks as you want.

denver docker

You can also print the environment in a docker friendly format:

$ denver docker defaultenv myapp

This would output:

-e ADMIN_EMAIL=bob@thebuilder.com -e HOSTNAME=bobthebuilder.com

denver inject

Read env vars one per line from stdin

file - myenv.txt:

HELLO=world
ADMIN_EMAIL=bob@thebuilder.com
$ cat myenv.txt | denver inject myapp
$ denver docker myapp

This would print:

-e HELLO=world -e ADMIN_EMAIL=bob@thebuilder.com

license

MIT