github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/worker/provisioner/manifold.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package provisioner 5 6 import ( 7 "github.com/juju/errors" 8 9 "github.com/juju/juju/agent" 10 "github.com/juju/juju/api/base" 11 apiprovisioner "github.com/juju/juju/api/provisioner" 12 "github.com/juju/juju/worker" 13 "github.com/juju/juju/worker/dependency" 14 ) 15 16 // ManifoldConfig defines an environment provisioner's dependencies. It's not 17 // currently clear whether it'll be easier to extend this type to include all 18 // provisioners, or to create separate (Environ|Container)Manifold[Config]s; 19 // for now we dodge the question because we don't need container provisioners 20 // in dependency engines. Yet. 21 type ManifoldConfig struct { 22 AgentName string 23 APICallerName string 24 } 25 26 // Manifold creates a manifold that runs an environemnt provisioner. See the 27 // ManifoldConfig type for discussion about how this can/should evolve. 28 func Manifold(config ManifoldConfig) dependency.Manifold { 29 return dependency.Manifold{ 30 Inputs: []string{config.AgentName, config.APICallerName}, 31 Start: func(context dependency.Context) (worker.Worker, error) { 32 var agent agent.Agent 33 if err := context.Get(config.AgentName, &agent); err != nil { 34 return nil, errors.Trace(err) 35 } 36 var apiCaller base.APICaller 37 if err := context.Get(config.APICallerName, &apiCaller); err != nil { 38 return nil, errors.Trace(err) 39 } 40 api := apiprovisioner.NewState(apiCaller) 41 config := agent.CurrentConfig() 42 w, err := NewEnvironProvisioner(api, config) 43 if err != nil { 44 return nil, errors.Trace(err) 45 } 46 return w, nil 47 }, 48 } 49 }