github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/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 "gopkg.in/juju/names.v2" 9 10 "github.com/juju/juju/api/base" 11 "github.com/juju/juju/api/common" 12 apiwatcher "github.com/juju/juju/api/watcher" 13 "github.com/juju/juju/apiserver/params" 14 "github.com/juju/juju/watcher" 15 ) 16 17 const instancePollerFacade = "InstancePoller" 18 19 // API provides access to the InstancePoller API facade. 20 type API struct { 21 *common.ModelWatcher 22 23 facade base.FacadeCaller 24 } 25 26 // NewAPI creates a new client-side InstancePoller facade. 27 func NewAPI(caller base.APICaller) *API { 28 if caller == nil { 29 panic("caller is nil") 30 } 31 facadeCaller := base.NewFacadeCaller(caller, instancePollerFacade) 32 return &API{ 33 ModelWatcher: common.NewModelWatcher(facadeCaller), 34 facade: facadeCaller, 35 } 36 } 37 38 // Machine provides access to methods of a state.Machine through the 39 // facade. 40 func (api *API) Machine(tag names.MachineTag) (*Machine, error) { 41 life, err := common.Life(api.facade, tag) 42 if err != nil { 43 return nil, errors.Trace(err) 44 } 45 return &Machine{api.facade, tag, life}, nil 46 } 47 48 var newStringsWatcher = apiwatcher.NewStringsWatcher 49 50 // WatchModelMachines return a StringsWatcher reporting waiting for the 51 // model configuration to change. 52 func (api *API) WatchModelMachines() (watcher.StringsWatcher, error) { 53 var result params.StringsWatchResult 54 err := api.facade.FacadeCall("WatchModelMachines", nil, &result) 55 if err != nil { 56 return nil, err 57 } 58 if result.Error != nil { 59 return nil, result.Error 60 } 61 return newStringsWatcher(api.facade.RawAPICaller(), result), nil 62 }