github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/unitassigner/manifold.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package unitassigner
     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/agent/unitassigner"
    12  	"github.com/juju/juju/api/base"
    13  	"github.com/juju/juju/cmd/jujud/agent/engine"
    14  )
    15  
    16  // Logger represents the methods used by the worker to log details.
    17  type Logger interface {
    18  	Tracef(string, ...interface{})
    19  }
    20  
    21  // ManifoldConfig describes the resources used by a unitassigner worker.
    22  type ManifoldConfig struct {
    23  	APICallerName string
    24  	Logger        Logger
    25  }
    26  
    27  // Manifold returns a Manifold that runs a unitassigner worker.
    28  func Manifold(config ManifoldConfig) dependency.Manifold {
    29  	return engine.APIManifold(
    30  		engine.APIManifoldConfig{
    31  			APICallerName: config.APICallerName,
    32  		},
    33  		config.start,
    34  	)
    35  }
    36  
    37  // start returns a unitassigner worker using the supplied APICaller.
    38  func (c *ManifoldConfig) start(apiCaller base.APICaller) (worker.Worker, error) {
    39  	facade := unitassigner.New(apiCaller)
    40  	worker, err := New(facade, c.Logger)
    41  	if err != nil {
    42  		return nil, errors.Trace(err)
    43  	}
    44  	return worker, nil
    45  }