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