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  }