github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/firewaller/shim.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package firewaller 5 6 import ( 7 "io" 8 9 "github.com/juju/errors" 10 "gopkg.in/juju/names.v2" 11 "gopkg.in/juju/worker.v1" 12 13 "github.com/juju/juju/api" 14 "github.com/juju/juju/api/base" 15 "github.com/juju/juju/api/crossmodelrelations" 16 "github.com/juju/juju/api/firewaller" 17 "github.com/juju/juju/api/remoterelations" 18 "github.com/juju/juju/worker/apicaller" 19 ) 20 21 // NewRemoteRelationsFacade creates a remote relations API facade. 22 func NewRemoteRelationsFacade(apiCaller base.APICaller) (*remoterelations.Client, error) { 23 facade := remoterelations.NewClient(apiCaller) 24 return facade, nil 25 } 26 27 // NewFirewallerFacade creates a firewaller API facade. 28 func NewFirewallerFacade(apiCaller base.APICaller) (FirewallerAPI, error) { 29 facade, err := firewaller.NewClient(apiCaller) 30 if err != nil { 31 return nil, errors.Trace(err) 32 } 33 return facade, nil 34 } 35 36 // NewWorker creates a firewaller worker. 37 func NewWorker(cfg Config) (worker.Worker, error) { 38 w, err := NewFirewaller(cfg) 39 if err != nil { 40 return nil, errors.Trace(err) 41 } 42 return w, nil 43 } 44 45 // crossmodelFirewallerFacadeFunc returns a function that 46 // can be used to construct instances which manage remote relation 47 // firewall changes for a given model. 48 49 // For now we use a facade, but in future this may evolve into a REST caller. 50 func crossmodelFirewallerFacadeFunc( 51 connectionFunc apicaller.NewExternalControllerConnectionFunc, 52 ) newCrossModelFacadeFunc { 53 return func(apiInfo *api.Info) (CrossModelFirewallerFacadeCloser, error) { 54 apiInfo.Tag = names.NewUserTag(api.AnonymousUsername) 55 conn, err := connectionFunc(apiInfo) 56 if err != nil { 57 return nil, errors.Trace(err) 58 } 59 facade := crossmodelrelations.NewClient(conn) 60 return &crossModelFirewallerFacadeCloser{facade, conn}, nil 61 } 62 } 63 64 type crossModelFirewallerFacadeCloser struct { 65 CrossModelFirewallerFacade 66 conn io.Closer 67 } 68 69 func (p *crossModelFirewallerFacadeCloser) Close() error { 70 return p.conn.Close() 71 }