github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/caasunitsmanager/manifold.go (about) 1 // Copyright 2022 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package caasunitsmanager 5 6 import ( 7 "github.com/juju/clock" 8 "github.com/juju/errors" 9 "github.com/juju/worker/v3" 10 "github.com/juju/worker/v3/dependency" 11 ) 12 13 // Logger for logging messages. 14 type Logger interface { 15 Infof(string, ...interface{}) 16 Errorf(string, ...interface{}) 17 } 18 19 // ManifoldConfig defines the names of the manifolds on which a 20 // Manifold will depend. 21 type ManifoldConfig struct { 22 AgentName string 23 APICallerName string 24 25 Logger 26 Clock clock.Clock 27 28 Hub 29 } 30 31 // Validate ensures all the required values for the config are set. 32 func (config *ManifoldConfig) Validate() error { 33 if config.Clock == nil { 34 return errors.NotValidf("missing Clock") 35 } 36 if config.Logger == nil { 37 return errors.NotValidf("missing Logger") 38 } 39 if config.Hub == nil { 40 return errors.NotValidf("missing Hub") 41 } 42 return nil 43 } 44 45 // Manifold returns a dependency manifold that runs a caasunitmanager 46 // worker, using the resource names defined in the supplied config. 47 func Manifold(config ManifoldConfig) dependency.Manifold { 48 return dependency.Manifold{ 49 Inputs: []string{ 50 config.AgentName, 51 config.APICallerName, 52 }, 53 Start: func(context dependency.Context) (worker.Worker, error) { 54 if err := config.Validate(); err != nil { 55 return nil, errors.Trace(err) 56 } 57 58 return NewWorker(Config{ 59 Logger: config.Logger, 60 Clock: config.Clock, 61 Hub: config.Hub, 62 }) 63 }, 64 } 65 }