github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/secretspruner/manifold.go (about) 1 // Copyright 2023 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package secretspruner 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/api/controller/usersecrets" 13 ) 14 15 // ManifoldConfig describes the resources used by the secretspruner worker. 16 type ManifoldConfig struct { 17 APICallerName string 18 Logger Logger 19 20 NewUserSecretsFacade func(base.APICaller) SecretsFacade 21 NewWorker func(Config) (worker.Worker, error) 22 } 23 24 // NewUserSecretsFacade returns a new SecretsFacade. 25 func NewUserSecretsFacade(caller base.APICaller) SecretsFacade { 26 return usersecrets.NewClient(caller) 27 } 28 29 // Manifold returns a Manifold that encapsulates the secretspruner worker. 30 func Manifold(config ManifoldConfig) dependency.Manifold { 31 return dependency.Manifold{ 32 Inputs: []string{ 33 config.APICallerName, 34 }, 35 Start: config.start, 36 } 37 } 38 39 // Validate is called by start to check for bad configuration. 40 func (cfg ManifoldConfig) Validate() error { 41 if cfg.APICallerName == "" { 42 return errors.NotValidf("empty APICallerName") 43 } 44 if cfg.Logger == nil { 45 return errors.NotValidf("nil Logger") 46 } 47 if cfg.NewUserSecretsFacade == nil { 48 return errors.NotValidf("nil NewUserSecretsFacade") 49 } 50 if cfg.NewWorker == nil { 51 return errors.NotValidf("nil NewWorker") 52 } 53 return nil 54 } 55 56 // start is a StartFunc for a Worker manifold. 57 func (cfg ManifoldConfig) start(context dependency.Context) (worker.Worker, error) { 58 if err := cfg.Validate(); err != nil { 59 return nil, errors.Trace(err) 60 } 61 62 var apiCaller base.APICaller 63 if err := context.Get(cfg.APICallerName, &apiCaller); err != nil { 64 return nil, errors.Trace(err) 65 } 66 67 worker, err := cfg.NewWorker(Config{ 68 SecretsFacade: cfg.NewUserSecretsFacade(apiCaller), 69 Logger: cfg.Logger, 70 }) 71 if err != nil { 72 return nil, errors.Trace(err) 73 } 74 return worker, nil 75 }