github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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 "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/environs" 13 "github.com/juju/juju/worker/common" 14 ) 15 16 // ManifoldConfig holds the names of the resources used by, and the 17 // additional dependencies of, an undertaker worker. 18 type ManifoldConfig struct { 19 APICallerName string 20 CloudDestroyerName string 21 22 NewFacade func(base.APICaller) (Facade, error) 23 NewWorker func(Config) (worker.Worker, error) 24 NewCredentialValidatorFacade func(base.APICaller) (common.CredentialAPI, error) 25 } 26 27 func (config ManifoldConfig) start(context dependency.Context) (worker.Worker, error) { 28 29 var apiCaller base.APICaller 30 if err := context.Get(config.APICallerName, &apiCaller); err != nil { 31 return nil, errors.Trace(err) 32 } 33 var destroyer environs.CloudDestroyer 34 if err := context.Get(config.CloudDestroyerName, &destroyer); err != nil { 35 return nil, errors.Trace(err) 36 } 37 38 facade, err := config.NewFacade(apiCaller) 39 if err != nil { 40 return nil, errors.Trace(err) 41 } 42 43 credentialAPI, err := config.NewCredentialValidatorFacade(apiCaller) 44 if err != nil { 45 return nil, errors.Trace(err) 46 } 47 48 worker, err := config.NewWorker(Config{ 49 Facade: facade, 50 Destroyer: destroyer, 51 CredentialAPI: credentialAPI, 52 }) 53 if err != nil { 54 return nil, errors.Trace(err) 55 } 56 return worker, nil 57 } 58 59 // Manifold returns a dependency.Manifold that runs a worker responsible 60 // for shepherding a Dying model into Dead and ultimate removal. 61 func Manifold(config ManifoldConfig) dependency.Manifold { 62 return dependency.Manifold{ 63 Inputs: []string{ 64 config.APICallerName, 65 config.CloudDestroyerName, 66 }, 67 Start: config.start, 68 } 69 }