github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/worker/instancepoller/manifold.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package instancepoller 5 6 import ( 7 "github.com/juju/errors" 8 9 "github.com/juju/juju/api/base" 10 "github.com/juju/juju/api/instancepoller" 11 "github.com/juju/juju/environs" 12 "github.com/juju/juju/worker" 13 "github.com/juju/juju/worker/dependency" 14 ) 15 16 // ManifoldConfig describes the resources used by the instancepoller worker. 17 type ManifoldConfig struct { 18 APICallerName string 19 EnvironName string 20 } 21 22 func (config ManifoldConfig) start(context dependency.Context) (worker.Worker, error) { 23 var environ environs.Environ 24 if err := context.Get(config.EnvironName, &environ); err != nil { 25 return nil, errors.Trace(err) 26 } 27 28 var apiCaller base.APICaller 29 if err := context.Get(config.APICallerName, &apiCaller); err != nil { 30 return nil, errors.Trace(err) 31 } 32 facade := instancepoller.NewAPI(apiCaller) 33 34 w, err := NewWorker(Config{ 35 Facade: facade, 36 Environ: environ, 37 }) 38 if err != nil { 39 return nil, errors.Trace(err) 40 } 41 return w, nil 42 } 43 44 // Manifold returns a Manifold that encapsulates the instancepoller worker. 45 func Manifold(config ManifoldConfig) dependency.Manifold { 46 return dependency.Manifold{ 47 Inputs: []string{config.APICallerName, config.EnvironName}, 48 Start: config.start, 49 } 50 }