github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/cleaner/manifold.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package cleaner 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/cleaner" 14 ) 15 16 // ManifoldConfig describes the resources used by the cleanup worker. 17 type ManifoldConfig struct { 18 APICallerName string 19 ClockName string 20 } 21 22 // Validate is called by start to check for bad configuration. 23 func (config ManifoldConfig) Validate() error { 24 if config.APICallerName == "" { 25 return errors.NotValidf("empty APICallerName") 26 } 27 if config.ClockName == "" { 28 return errors.NotValidf("empty ClockName") 29 } 30 return nil 31 } 32 33 // Manifold returns a Manifold that encapsulates the cleanup worker. 34 func Manifold(config ManifoldConfig) dependency.Manifold { 35 return dependency.Manifold{ 36 Inputs: []string{config.APICallerName, config.ClockName}, 37 Start: config.start, 38 } 39 } 40 41 // start is a StartFunc for a Worker manifold. 42 func (config ManifoldConfig) start(context dependency.Context) (worker.Worker, error) { 43 if err := config.Validate(); err != nil { 44 return nil, errors.Trace(err) 45 } 46 var apiCaller base.APICaller 47 if err := context.Get(config.APICallerName, &apiCaller); err != nil { 48 return nil, errors.Trace(err) 49 } 50 var clock clock.Clock 51 if err := context.Get(config.ClockName, &clock); err != nil { 52 return nil, errors.Trace(err) 53 } 54 api := cleaner.NewAPI(apiCaller) 55 w, err := NewCleaner(api, clock) 56 if err != nil { 57 return nil, errors.Trace(err) 58 } 59 return w, nil 60 }