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 }