func (self *fracker) Frack(out io.Writer, keys []string) error {
	var node Node
	var err error
	env := make(map[string]string, 0)
	for _, key := range keys {
		key = filepath.Clean(key)
		node, err = self.client.Get(key)
		if err != nil {
			return err
		}
		node.Each(func(k, v string) {
			name := strings.TrimPrefix(k, key)
			if name == "" {
				name = filepath.Base(k)
			}
			name = strings.TrimPrefix(name, "/")
			name = strings.ToUpper(name)
			name = strings.NewReplacer("/", "_", "-", "_").Replace(name)
			env[name] = v
		})
	}
	for name, val := range env {
		fmt.Fprintf(out, "%s=%s\n", name, val)
	}
	return nil
}
Frack() reads the configuration values out of etcd and writes them to stdout. Panics if a requested key
is not found in etcd.
package fracker
import (
	"fmt"
	"io"
	"path/filepath"
	"strings"
)
type Fracker interface {
	Frack(io.Writer, []string) error
}
func New(client Client) Fracker {
	return &fracker{client}
}
type fracker struct {
	client Client
}