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