github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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  
     9  	"github.com/juju/juju/api/base"
    10  	apiwatcher "github.com/juju/juju/api/watcher"
    11  	"github.com/juju/juju/apiserver/params"
    12  	"github.com/juju/juju/watcher"
    13  )
    14  
    15  const addresserFacade = "Addresser"
    16  
    17  // API provides access to the InstancePoller API facade.
    18  type API struct {
    19  	facade base.FacadeCaller
    20  }
    21  
    22  // NewAPI creates a new client-side Addresser facade.
    23  func NewAPI(caller base.APICaller) *API {
    24  	if caller == nil {
    25  		panic("caller is nil")
    26  	}
    27  	return &API{
    28  		facade: base.NewFacadeCaller(caller, addresserFacade),
    29  	}
    30  }
    31  
    32  // CanDeallocateAddresses checks if the current model can
    33  // deallocate IP addresses.
    34  func (api *API) CanDeallocateAddresses() (bool, error) {
    35  	var result params.BoolResult
    36  	if err := api.facade.FacadeCall("CanDeallocateAddresses", nil, &result); err != nil {
    37  		return false, errors.Trace(err)
    38  	}
    39  	if result.Error == nil {
    40  		return result.Result, nil
    41  	}
    42  	return false, errors.Trace(result.Error)
    43  }
    44  
    45  // CleanupIPAddresses releases and removes the dead IP addresses. If not
    46  // all IP addresses could be released and removed a params.ErrTryAgain
    47  // is returned.
    48  func (api *API) CleanupIPAddresses() error {
    49  	var result params.ErrorResult
    50  	if err := api.facade.FacadeCall("CleanupIPAddresses", nil, &result); err != nil {
    51  		return errors.Trace(err)
    52  	}
    53  	if result.Error == nil {
    54  		return nil
    55  	}
    56  	return errors.Trace(result.Error)
    57  }
    58  
    59  var newEntitiesWatcher = apiwatcher.NewEntitiesWatcher
    60  
    61  // WatchIPAddresses returns a EntitiesWatcher for observing the
    62  // tags of IP addresses with changes in life cycle.
    63  // The initial event will contain the tags of any IP addresses
    64  // which are no longer Alive.
    65  func (api *API) WatchIPAddresses() (watcher.EntitiesWatcher, error) {
    66  	var result params.EntitiesWatchResult
    67  	err := api.facade.FacadeCall("WatchIPAddresses", nil, &result)
    68  	if err != nil {
    69  		return nil, errors.Trace(err)
    70  	}
    71  	if result.Error == nil {
    72  		w := newEntitiesWatcher(api.facade.RawAPICaller(), result)
    73  		return w, nil
    74  	}
    75  	return nil, errors.Trace(result.Error)
    76  }