github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/api/addresser/addresser.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package addresser
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	"github.com/juju/loggo"
     9  
    10  	"github.com/juju/juju/api/base"
    11  	"github.com/juju/juju/api/watcher"
    12  	"github.com/juju/juju/apiserver/params"
    13  )
    14  
    15  var logger = loggo.GetLogger("juju.api.addresser")
    16  
    17  const addresserFacade = "Addresser"
    18  
    19  // API provides access to the InstancePoller API facade.
    20  type API struct {
    21  	facade base.FacadeCaller
    22  }
    23  
    24  // NewAPI creates a new client-side Addresser facade.
    25  func NewAPI(caller base.APICaller) *API {
    26  	if caller == nil {
    27  		panic("caller is nil")
    28  	}
    29  	return &API{
    30  		facade: base.NewFacadeCaller(caller, addresserFacade),
    31  	}
    32  }
    33  
    34  // CanDeallocateAddresses checks if the current environment can
    35  // deallocate IP addresses.
    36  func (api *API) CanDeallocateAddresses() (bool, error) {
    37  	var result params.BoolResult
    38  	if err := api.facade.FacadeCall("CanDeallocateAddresses", nil, &result); err != nil {
    39  		return false, errors.Trace(err)
    40  	}
    41  	if result.Error == nil {
    42  		return result.Result, nil
    43  	}
    44  	return false, errors.Trace(result.Error)
    45  }
    46  
    47  // CleanupIPAddresses releases and removes the dead IP addresses. If not
    48  // all IP addresses could be released and removed a params.ErrTryAgain
    49  // is returned.
    50  func (api *API) CleanupIPAddresses() error {
    51  	var result params.ErrorResult
    52  	if err := api.facade.FacadeCall("CleanupIPAddresses", nil, &result); err != nil {
    53  		return errors.Trace(err)
    54  	}
    55  	if result.Error == nil {
    56  		return nil
    57  	}
    58  	return errors.Trace(result.Error)
    59  }
    60  
    61  var newEntityWatcher = watcher.NewEntityWatcher
    62  
    63  // WatchIPAddresses returns a EntityWatcher for observing the
    64  // tags of IP addresses with changes in life cycle.
    65  // The initial event will contain the tags of any IP addresses
    66  // which are no longer Alive.
    67  func (api *API) WatchIPAddresses() (watcher.EntityWatcher, error) {
    68  	var result params.EntityWatchResult
    69  	err := api.facade.FacadeCall("WatchIPAddresses", nil, &result)
    70  	if err != nil {
    71  		return nil, errors.Trace(err)
    72  	}
    73  	if result.Error == nil {
    74  		w := newEntityWatcher(api.facade.RawAPICaller(), result)
    75  		return w, nil
    76  	}
    77  	return nil, errors.Trace(result.Error)
    78  }