github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/worker/undertaker/manifold.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package undertaker 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/juju/api/base" 9 "github.com/juju/juju/environs" 10 "github.com/juju/juju/worker" 11 "github.com/juju/juju/worker/dependency" 12 ) 13 14 // ManifoldConfig holds the names of the resources used by, and the 15 // additional dependencies of, an undertaker worker. 16 type ManifoldConfig struct { 17 APICallerName string 18 EnvironName string 19 20 NewFacade func(base.APICaller) (Facade, error) 21 NewWorker func(Config) (worker.Worker, error) 22 } 23 24 func (config ManifoldConfig) start(context dependency.Context) (worker.Worker, error) { 25 26 var apiCaller base.APICaller 27 if err := context.Get(config.APICallerName, &apiCaller); err != nil { 28 return nil, errors.Trace(err) 29 } 30 var environ environs.Environ 31 if err := context.Get(config.EnvironName, &environ); err != nil { 32 return nil, errors.Trace(err) 33 } 34 35 facade, err := config.NewFacade(apiCaller) 36 if err != nil { 37 return nil, errors.Trace(err) 38 } 39 worker, err := config.NewWorker(Config{ 40 Facade: facade, 41 Environ: environ, 42 }) 43 if err != nil { 44 return nil, errors.Trace(err) 45 } 46 return worker, nil 47 } 48 49 // Manifold returns a dependency.Manifold that runs a worker responsible 50 // for shepherding a Dying model into Dead and ultimate removal. 51 func Manifold(config ManifoldConfig) dependency.Manifold { 52 return dependency.Manifold{ 53 Inputs: []string{ 54 config.APICallerName, 55 config.EnvironName, 56 }, 57 Start: config.start, 58 } 59 }