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  }