github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/caasfirewaller/manifold.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package caasfirewaller 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/caas" 13 ) 14 15 // ManifoldConfig describes the resources used by the firewaller worker. 16 type ManifoldConfig struct { 17 APICallerName string 18 BrokerName string 19 20 ControllerUUID string 21 ModelUUID string 22 23 NewClient func(base.APICaller) Client 24 NewWorker func(Config) (worker.Worker, error) 25 } 26 27 // Manifold returns a Manifold that encapsulates the firewaller worker. 28 func Manifold(cfg ManifoldConfig) dependency.Manifold { 29 return dependency.Manifold{ 30 Inputs: []string{ 31 cfg.APICallerName, 32 cfg.BrokerName, 33 }, 34 Start: cfg.start, 35 } 36 } 37 38 // Validate is called by start to check for bad configuration. 39 func (config ManifoldConfig) Validate() error { 40 if config.ControllerUUID == "" { 41 return errors.NotValidf("empty ControllerUUID") 42 } 43 if config.ModelUUID == "" { 44 return errors.NotValidf("empty ModelUUID") 45 } 46 if config.APICallerName == "" { 47 return errors.NotValidf("empty APICallerName") 48 } 49 if config.BrokerName == "" { 50 return errors.NotValidf("empty BrokerName") 51 } 52 if config.NewClient == nil { 53 return errors.NotValidf("nil NewClient") 54 } 55 if config.NewWorker == nil { 56 return errors.NotValidf("nil NewWorker") 57 } 58 return nil 59 } 60 61 // start is a StartFunc for a Worker manifold. 62 func (config ManifoldConfig) start(context dependency.Context) (worker.Worker, error) { 63 if err := config.Validate(); err != nil { 64 return nil, errors.Trace(err) 65 } 66 67 var apiCaller base.APICaller 68 if err := context.Get(config.APICallerName, &apiCaller); err != nil { 69 return nil, errors.Trace(err) 70 } 71 72 var broker caas.Broker 73 if err := context.Get(config.BrokerName, &broker); err != nil { 74 return nil, errors.Trace(err) 75 } 76 77 client := config.NewClient(apiCaller) 78 w, err := config.NewWorker(Config{ 79 ControllerUUID: config.ControllerUUID, 80 ModelUUID: config.ModelUUID, 81 ApplicationGetter: client, 82 LifeGetter: client, 83 ServiceExposer: broker, 84 }) 85 if err != nil { 86 return nil, errors.Trace(err) 87 } 88 return w, nil 89 }