github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/resource/resourceadapters/apiclient.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package resourceadapters
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  
     9  	"github.com/juju/juju/api"
    10  	"github.com/juju/juju/api/base"
    11  	"github.com/juju/juju/resource"
    12  	"github.com/juju/juju/resource/api/client"
    13  	"github.com/juju/juju/resource/api/server"
    14  )
    15  
    16  // NewAPIClient is mostly a copy of the newClient code in
    17  // component/all/resources.go.  It lives here because it simplifies this code
    18  // immensely.
    19  func NewAPIClient(newAPICaller func() (api.Connection, error)) (*client.Client, error) {
    20  	apiCaller, err := newAPICaller()
    21  	if err != nil {
    22  		return nil, errors.Trace(err)
    23  	}
    24  
    25  	return newAPIClient(apiCaller)
    26  }
    27  
    28  func newAPIClient(apiCaller api.Connection) (*client.Client, error) {
    29  	caller := base.NewFacadeCallerForVersion(apiCaller, resource.ComponentName, server.Version)
    30  
    31  	httpClient, err := apiCaller.HTTPClient()
    32  	if err != nil {
    33  		return nil, errors.Trace(err)
    34  	}
    35  	// The apiCaller takes care of prepending /environment/<envUUID>.
    36  	apiClient := client.NewClient(caller, httpClient, apiCaller)
    37  	return apiClient, nil
    38  }