node package manager

denver

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

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