github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/caasfirewallersidecar/manifold.go (about) 1 // Copyright 2020 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package caasfirewallersidecar 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/worker/v3" 9 "github.com/juju/worker/v3/dependency" 10 11 "github.com/juju/juju/api/base" 12 "github.com/juju/juju/caas" 13 ) 14 15 // Logger represents the methods used by the worker to log details. 16 type Logger interface { 17 Debugf(string, ...interface{}) 18 Warningf(string, ...interface{}) 19 Errorf(string, ...interface{}) 20 Tracef(string, ...interface{}) 21 } 22 23 // ManifoldConfig describes the resources used by the firewaller worker. 24 type ManifoldConfig struct { 25 APICallerName string 26 BrokerName string 27 28 ControllerUUID string 29 ModelUUID string 30 31 NewClient func(base.APICaller) Client 32 NewWorker func(Config) (worker.Worker, error) 33 Logger Logger 34 } 35 36 // Manifold returns a Manifold that encapsulates the firewaller worker. 37 func Manifold(cfg ManifoldConfig) dependency.Manifold { 38 return dependency.Manifold{ 39 Inputs: []string{ 40 cfg.APICallerName, 41 cfg.BrokerName, 42 }, 43 Start: cfg.start, 44 } 45 } 46 47 // Validate is called by start to check for bad configuration. 48 func (config ManifoldConfig) Validate() error { 49 if config.ControllerUUID == "" { 50 return errors.NotValidf("empty ControllerUUID") 51 } 52 if config.ModelUUID == "" { 53 return errors.NotValidf("empty ModelUUID") 54 } 55 if config.APICallerName == "" { 56 return errors.NotValidf("empty APICallerName") 57 } 58 if config.BrokerName == "" { 59 return errors.NotValidf("empty BrokerName") 60 } 61 if config.NewClient == nil { 62 return errors.NotValidf("nil NewClient") 63 } 64 if config.NewWorker == nil { 65 return errors.NotValidf("nil NewWorker") 66 } 67 if config.Logger == nil { 68 return errors.NotValidf("nil Logger") 69 } 70 return nil 71 } 72 73 // start is a StartFunc for a Worker manifold. 74 func (config ManifoldConfig) start(context dependency.Context) (worker.Worker, error) { 75 if err := config.Validate(); err != nil { 76 return nil, errors.Trace(err) 77 } 78 79 var apiCaller base.APICaller 80 if err := context.Get(config.APICallerName, &apiCaller); err != nil { 81 return nil, errors.Trace(err) 82 } 83 84 var broker caas.Broker 85 if err := context.Get(config.BrokerName, &broker); err != nil { 86 return nil, errors.Trace(err) 87 } 88 89 client := config.NewClient(apiCaller) 90 w, err := config.NewWorker(Config{ 91 ControllerUUID: config.ControllerUUID, 92 ModelUUID: config.ModelUUID, 93 FirewallerAPI: client, 94 LifeGetter: client, 95 Broker: broker, 96 Logger: config.Logger, 97 }) 98 if err != nil { 99 return nil, errors.Trace(err) 100 } 101 return w, nil 102 }