github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/meterstatus/context.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package meterstatus 5 6 import ( 7 "fmt" 8 "math/rand" 9 "time" 10 11 "github.com/juju/errors" 12 13 "github.com/juju/juju/worker/uniter/runner/context" 14 "github.com/juju/juju/worker/uniter/runner/jujuc" 15 ) 16 17 type limitedContext struct { 18 jujuc.RestrictedContext 19 20 env map[string]string 21 22 unitName string 23 id string 24 } 25 26 // NewLimitedContext creates a new context that implements just the bare minimum 27 // of the hooks.Context interface. 28 func NewLimitedContext(unitName string) *limitedContext { 29 // TODO(fwereade): 2016-03-17 lp:1558657 30 id := fmt.Sprintf("%s-%s-%d", unitName, "meter-status", rand.New(rand.NewSource(time.Now().Unix())).Int63()) 31 return &limitedContext{unitName: unitName, id: id} 32 } 33 34 // HookVars implements runner.Context. 35 func (ctx *limitedContext) HookVars(paths context.Paths) ([]string, error) { 36 vars := []string{ 37 "CHARM_DIR=" + paths.GetCharmDir(), // legacy 38 "JUJU_CHARM_DIR=" + paths.GetCharmDir(), 39 "JUJU_CONTEXT_ID=" + ctx.id, 40 "JUJU_AGENT_SOCKET=" + paths.GetJujucSocket(), 41 "JUJU_UNIT_NAME=" + ctx.unitName, 42 } 43 for key, val := range ctx.env { 44 vars = append(vars, fmt.Sprintf("%s=%s", key, val)) 45 } 46 return append(vars, context.OSDependentEnvVars(paths)...), nil 47 } 48 49 // SetEnvVars sets additional environment variables to be exported by the context. 50 func (ctx *limitedContext) SetEnvVars(vars map[string]string) { 51 if ctx.env == nil { 52 ctx.env = vars 53 return 54 } 55 for key, val := range vars { 56 ctx.env[key] = val 57 } 58 } 59 60 // UnitName implements runner.Context. 61 func (ctx *limitedContext) UnitName() string { 62 return ctx.unitName 63 } 64 65 // SetProcess implements runner.Context. 66 func (ctx *limitedContext) SetProcess(process context.HookProcess) {} 67 68 // ActionData implements runner.Context. 69 func (ctx *limitedContext) ActionData() (*context.ActionData, error) { 70 return nil, jujuc.ErrRestrictedContext 71 } 72 73 // Flush implements runner.Context. 74 func (ctx *limitedContext) Flush(_ string, err error) error { 75 return err 76 } 77 78 // HasExecutionSetUnitStatus implements runner.Context. 79 func (ctx *limitedContext) HasExecutionSetUnitStatus() bool { return false } 80 81 // ResetExecutionSetUnitStatus implements runner.Context. 82 func (ctx *limitedContext) ResetExecutionSetUnitStatus() {} 83 84 // Id implements runner.Context. 85 func (ctx *limitedContext) Id() string { return ctx.id } 86 87 // Prepare implements runner.Context. 88 func (ctx *limitedContext) Prepare() error { 89 return jujuc.ErrRestrictedContext 90 } 91 92 // Component implements runner.Context. 93 func (ctx *limitedContext) Component(name string) (jujuc.ContextComponent, error) { 94 return nil, errors.NotFoundf("context component %q", name) 95 }