github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/state/apiserver/common/addresses.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package common
     5  
     6  import (
     7  	"launchpad.net/juju-core/state/api/params"
     8  )
     9  
    10  // AddressAndCertGetter can be used to find out
    11  // state server addresses and the CA public certificate.
    12  type AddressAndCertGetter interface {
    13  	Addresses() ([]string, error)
    14  	APIAddresses() ([]string, error)
    15  	CACert() []byte
    16  }
    17  
    18  // APIAddresser implements the APIAddresses method
    19  type APIAddresser struct {
    20  	getter AddressAndCertGetter
    21  }
    22  
    23  // NewAPIAddresser returns a new APIAddresser that uses the given getter to
    24  // fetch its addresses.
    25  func NewAPIAddresser(getter AddressAndCertGetter) *APIAddresser {
    26  	return &APIAddresser{getter}
    27  }
    28  
    29  // APIAddresses returns the list of addresses used to connect to the API.
    30  func (a *APIAddresser) APIAddresses() (params.StringsResult, error) {
    31  	addrs, err := a.getter.APIAddresses()
    32  	if err != nil {
    33  		return params.StringsResult{}, err
    34  	}
    35  	return params.StringsResult{
    36  		Result: addrs,
    37  	}, nil
    38  }
    39  
    40  // StateAddresser implements a common set of methods for getting state
    41  // server addresses, and the CA certificate used to authenticate them.
    42  type StateAddresser struct {
    43  	getter AddressAndCertGetter
    44  }
    45  
    46  // NewAddresser returns a new StateAddresser that uses the given
    47  // st value to fetch its addresses.
    48  func NewStateAddresser(getter AddressAndCertGetter) *StateAddresser {
    49  	return &StateAddresser{getter}
    50  }
    51  
    52  // StateAddresses returns the list of addresses used to connect to the state.
    53  func (a *StateAddresser) StateAddresses() (params.StringsResult, error) {
    54  	addrs, err := a.getter.Addresses()
    55  	if err != nil {
    56  		return params.StringsResult{}, err
    57  	}
    58  	return params.StringsResult{
    59  		Result: addrs,
    60  	}, nil
    61  }
    62  
    63  // CACert returns the certificate used to validate the state connection.
    64  // Note: there is an open bug that Uniter (which uses only APIAddresser) should
    65  // add CACert to its interface. When it does, this API si likely to move to
    66  // APIAddresser instead of StateAddresser. (All other users of StateAddresser
    67  // already also expose APIAddresser)
    68  func (a *StateAddresser) CACert() params.BytesResult {
    69  	return params.BytesResult{
    70  		Result: a.getter.CACert(),
    71  	}
    72  }