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  }