node package manager

denver

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

denver

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

$ npm install denver -g

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.

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'
});

set a value for a stack

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

get a value from a stack

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

list all of the stacks

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

remove a stack from the db

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

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){
 
})

emitted when a value is set

emitted when a value is deleted

List the stack names we have environments for

$ denver ls

Remove a stack from the database

$ denver rm myapp

Print the value of a single environment variable

$ denver get myapp ADMIN_EMAIL

Write the value of a single environment variable

$ denver set myapp ADMIN_EMAIL bob@thebuilder.com

Remove a value from an environment

$ denver del myapp ADMIN_EMAIL

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.

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

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

MIT