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 }