github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/worker/secretbackendrotate/manifold.go (about) 1 // Copyright 2023 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package secretbackendrotate 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 "github.com/juju/juju/api/base" 13 "github.com/juju/juju/api/controller/secretsbackendmanager" 14 ) 15 16 // ManifoldConfig holds dependencies and configuration for a 17 // secretbackendrotate worker. 18 type ManifoldConfig struct { 19 Logger Logger 20 APICallerName string 21 } 22 23 // Manifold returns a dependency.Manifold that runs a secretbackendrotate worker. 24 func Manifold(config ManifoldConfig) dependency.Manifold { 25 return dependency.Manifold{ 26 Inputs: []string{ 27 config.APICallerName, 28 }, 29 Start: config.start, 30 } 31 } 32 33 func (c ManifoldConfig) start(context dependency.Context) (worker.Worker, error) { 34 if err := c.Validate(); err != nil { 35 return nil, errors.Trace(err) 36 } 37 38 var apiCaller base.APICaller 39 if err := context.Get(c.APICallerName, &apiCaller); err != nil { 40 return nil, err 41 } 42 return NewWorker(Config{ 43 SecretBackendManagerFacade: secretsbackendmanager.NewClient(apiCaller), 44 Logger: c.Logger, 45 Clock: clock.WallClock, 46 }) 47 } 48 49 // Validate validates a manifold config. 50 func (c ManifoldConfig) Validate() error { 51 if c.APICallerName == "" { 52 return errors.NotValidf("missing APICallerName") 53 } 54 if c.Logger == nil { 55 return errors.NotValidf("nil Logger") 56 } 57 return nil 58 }