github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/applicationscaler/manifold.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package applicationscaler 5 6 import ( 7 "github.com/juju/errors" 8 "gopkg.in/juju/worker.v1" 9 "gopkg.in/juju/worker.v1/dependency" 10 11 "github.com/juju/juju/api/base" 12 "github.com/juju/juju/cmd/jujud/agent/engine" 13 ) 14 15 // ManifoldConfig holds dependencies and configuration for an 16 // applicationscaler worker. 17 type ManifoldConfig struct { 18 APICallerName string 19 NewFacade func(base.APICaller) (Facade, error) 20 NewWorker func(Config) (worker.Worker, error) 21 } 22 23 // start is a method on ManifoldConfig because that feels a bit cleaner 24 // than closing over config in Manifold. 25 func (config ManifoldConfig) start(apiCaller base.APICaller) (worker.Worker, error) { 26 facade, err := config.NewFacade(apiCaller) 27 if err != nil { 28 return nil, errors.Trace(err) 29 } 30 return config.NewWorker(Config{ 31 Facade: facade, 32 }) 33 } 34 35 // Manifold returns a dependency.Manifold that runs an applicationscaler worker. 36 func Manifold(config ManifoldConfig) dependency.Manifold { 37 return engine.APIManifold( 38 engine.APIManifoldConfig{config.APICallerName}, 39 config.start, 40 ) 41 }