github.com/rogpeppe/juju@v0.0.0-20140613142852-6337964b789e/state/api/common/apiaddresser.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package common 5 6 import ( 7 "github.com/juju/juju/network" 8 "github.com/juju/juju/state/api/base" 9 "github.com/juju/juju/state/api/params" 10 "github.com/juju/juju/state/api/watcher" 11 ) 12 13 // APIAddresser provides common client-side API 14 // functions to call into apiserver.common.APIAddresser 15 type APIAddresser struct { 16 facadeName string 17 caller base.Caller 18 } 19 20 // NewAPIAddresser returns a new APIAddresser that makes API calls 21 // using caller and the specified facade name. 22 func NewAPIAddresser(facadeName string, caller base.Caller) *APIAddresser { 23 return &APIAddresser{ 24 facadeName: facadeName, 25 caller: caller, 26 } 27 } 28 29 // APIAddresses returns the list of addresses used to connect to the API. 30 func (a *APIAddresser) APIAddresses() ([]string, error) { 31 var result params.StringsResult 32 err := a.caller.Call(a.facadeName, "", "APIAddresses", nil, &result) 33 if err != nil { 34 return nil, err 35 } 36 37 if err := result.Error; err != nil { 38 return nil, err 39 } 40 return result.Result, nil 41 } 42 43 // CACert returns the certificate used to validate the API and state connections. 44 func (a *APIAddresser) CACert() (string, error) { 45 var result params.BytesResult 46 err := a.caller.Call(a.facadeName, "", "CACert", nil, &result) 47 if err != nil { 48 return "", err 49 } 50 return string(result.Result), nil 51 } 52 53 // APIHostPorts returns the host/port addresses of the API servers. 54 func (a *APIAddresser) APIHostPorts() ([][]network.HostPort, error) { 55 var result params.APIHostPortsResult 56 err := a.caller.Call(a.facadeName, "", "APIHostPorts", nil, &result) 57 if err != nil { 58 return nil, err 59 } 60 return result.Servers, nil 61 } 62 63 // WatchAPIHostPorts watches the host/port addresses of the API servers. 64 func (a *APIAddresser) WatchAPIHostPorts() (watcher.NotifyWatcher, error) { 65 var result params.NotifyWatchResult 66 err := a.caller.Call(a.facadeName, "", "WatchAPIHostPorts", nil, &result) 67 if err != nil { 68 return nil, err 69 } 70 return watcher.NewNotifyWatcher(a.caller, result), nil 71 }