github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/api/instancepoller/instancepoller.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package instancepoller 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/names" 9 10 "github.com/juju/juju/api/base" 11 "github.com/juju/juju/api/common" 12 "github.com/juju/juju/api/watcher" 13 "github.com/juju/juju/apiserver/params" 14 ) 15 16 const instancePollerFacade = "InstancePoller" 17 18 // API provides access to the InstancePoller API facade. 19 type API struct { 20 *common.EnvironWatcher 21 22 facade base.FacadeCaller 23 } 24 25 // NewAPI creates a new client-side InstancePoller facade. 26 func NewAPI(caller base.APICaller) *API { 27 if caller == nil { 28 panic("caller is nil") 29 } 30 facadeCaller := base.NewFacadeCaller(caller, instancePollerFacade) 31 return &API{ 32 EnvironWatcher: common.NewEnvironWatcher(facadeCaller), 33 facade: facadeCaller, 34 } 35 } 36 37 // Machine provides access to methods of a state.Machine through the 38 // facade. 39 func (api *API) Machine(tag names.MachineTag) (*Machine, error) { 40 life, err := common.Life(api.facade, tag) 41 if err != nil { 42 return nil, errors.Trace(err) 43 } 44 return &Machine{api.facade, tag, life}, nil 45 } 46 47 var newStringsWatcher = watcher.NewStringsWatcher 48 49 // WatchEnvironMachines return a StringsWatcher reporting waiting for the 50 // environment configuration to change. 51 func (api *API) WatchEnvironMachines() (watcher.StringsWatcher, error) { 52 var result params.StringsWatchResult 53 err := api.facade.FacadeCall("WatchEnvironMachines", nil, &result) 54 if err != nil { 55 return nil, err 56 } 57 if result.Error != nil { 58 return nil, result.Error 59 } 60 return newStringsWatcher(api.facade.RawAPICaller(), result), nil 61 }