github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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 "gopkg.in/juju/worker.v1" 9 "gopkg.in/juju/worker.v1/dependency" 10 11 "github.com/juju/juju/api/base" 12 "github.com/juju/juju/api/machineundertaker" 13 "github.com/juju/juju/api/watcher" 14 "github.com/juju/juju/environs" 15 "github.com/juju/juju/worker/common" 16 ) 17 18 // ManifoldConfig defines the machine undertaker's configuration and 19 // dependencies. 20 type ManifoldConfig struct { 21 APICallerName string 22 EnvironName string 23 24 NewWorker func(Facade, environs.Environ, common.CredentialAPI) (worker.Worker, error) 25 NewCredentialValidatorFacade func(base.APICaller) (common.CredentialAPI, error) 26 } 27 28 // Manifold returns a dependency.Manifold that runs a machine 29 // undertaker. 30 func Manifold(config ManifoldConfig) dependency.Manifold { 31 return dependency.Manifold{ 32 Inputs: []string{config.APICallerName, config.EnvironName}, 33 Start: func(context dependency.Context) (worker.Worker, error) { 34 var apiCaller base.APICaller 35 if err := context.Get(config.APICallerName, &apiCaller); err != nil { 36 return nil, errors.Trace(err) 37 } 38 var environ environs.Environ 39 if err := context.Get(config.EnvironName, &environ); err != nil { 40 return nil, errors.Trace(err) 41 } 42 api, err := machineundertaker.NewAPI(apiCaller, watcher.NewNotifyWatcher) 43 if err != nil { 44 return nil, errors.Trace(err) 45 } 46 47 credentialAPI, err := config.NewCredentialValidatorFacade(apiCaller) 48 if err != nil { 49 return nil, errors.Trace(err) 50 } 51 52 w, err := config.NewWorker(api, environ, credentialAPI) 53 if err != nil { 54 return nil, errors.Trace(err) 55 } 56 return w, nil 57 }, 58 } 59 }