github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/externalcontrollerupdater/manifold.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package externalcontrollerupdater 5 6 import ( 7 "github.com/juju/clock" 8 "github.com/juju/errors" 9 "gopkg.in/juju/worker.v1" 10 "gopkg.in/juju/worker.v1/dependency" 11 12 "github.com/juju/juju/api/base" 13 "github.com/juju/juju/api/externalcontrollerupdater" 14 ) 15 16 // ManifoldConfig describes the resources used by an 17 // externalcontrollerupdater worker. 18 type ManifoldConfig struct { 19 APICallerName string 20 21 NewExternalControllerWatcherClient NewExternalControllerWatcherClientFunc 22 } 23 24 // Validate validates the manifold configuration. 25 func (cfg ManifoldConfig) Validate() error { 26 if cfg.APICallerName == "" { 27 return errors.NotValidf("empty APICallerName") 28 } 29 if cfg.NewExternalControllerWatcherClient == nil { 30 return errors.NotValidf("nil NewExternalControllerWatcherClient") 31 } 32 return nil 33 } 34 35 // Manifold returns a Manifold that runs an externalcontrollerupdater worker. 36 func Manifold(config ManifoldConfig) dependency.Manifold { 37 return dependency.Manifold{ 38 Inputs: []string{ 39 config.APICallerName, 40 }, 41 Start: func(context dependency.Context) (worker.Worker, error) { 42 if err := config.Validate(); err != nil { 43 return nil, errors.Trace(err) 44 } 45 var apiCaller base.APICaller 46 if err := context.Get(config.APICallerName, &apiCaller); err != nil { 47 return nil, err 48 } 49 return manifoldStart(apiCaller, config.NewExternalControllerWatcherClient) 50 }, 51 } 52 } 53 54 // manifoldStart returns a unitassigner worker using the supplied APICaller. 55 func manifoldStart( 56 apiCaller base.APICaller, 57 newExternalControllerWatcherClient NewExternalControllerWatcherClientFunc, 58 ) (worker.Worker, error) { 59 client := externalcontrollerupdater.New(apiCaller) 60 worker, err := New( 61 client, 62 newExternalControllerWatcherClient, 63 clock.WallClock, 64 ) 65 if err != nil { 66 return nil, errors.Trace(err) 67 } 68 return worker, nil 69 }