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 }