github.com/jiasir/deis@v1.12.2/builder/env/envvar.go (about) 1 package env 2 3 import ( 4 "github.com/Masterminds/cookoo" 5 "github.com/Masterminds/cookoo/log" 6 "os" 7 ) 8 9 // Get gets one or more environment variables and puts them into the context. 10 // 11 // Parameters passed in are of the form varname => defaultValue. 12 // 13 // r.Route("foo", "example").Does(envvar.Get).Using("HOME").WithDefault(".") 14 // 15 // As with all environment variables, the default value must be a string. 16 // 17 // WARNING: Since parameters are a map, order of processing is not 18 // guaranteed. If order is important, you'll need to call this command 19 // multiple times. 20 // 21 // For each parameter (`Using` clause), this command will look into the 22 // environment for a matching variable. If it finds one, it will add that 23 // variable to the context. If it does not find one, it will expand the 24 // default value (so you can set a default to something like "$HOST:$PORT") 25 // and also put the (unexpanded) default value back into the context in case 26 // any subsequent call to `os.Getenv` occurs. 27 func Get(c cookoo.Context, params *cookoo.Params) (interface{}, cookoo.Interrupt) { 28 for name, def := range params.AsMap() { 29 var val string 30 if val = os.Getenv(name); len(val) == 0 { 31 def := def.(string) 32 val = os.ExpandEnv(def) 33 // We want to make sure that any subsequent calls to Getenv 34 // return the same default. 35 os.Setenv(name, val) 36 37 } 38 c.Put(name, val) 39 log.Debugf(c, "Name: %s, Val: %s", name, val) 40 } 41 return true, nil 42 }