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 }