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  }