github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/worker/uniter/remotestate/state.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package remotestate 5 6 import ( 7 "github.com/juju/names" 8 "gopkg.in/juju/charm.v6-unstable" 9 10 "github.com/juju/juju/api/uniter" 11 "github.com/juju/juju/api/watcher" 12 "github.com/juju/juju/apiserver/params" 13 ) 14 15 type State interface { 16 Relation(names.RelationTag) (Relation, error) 17 StorageAttachment(names.StorageTag, names.UnitTag) (params.StorageAttachment, error) 18 StorageAttachmentLife([]params.StorageAttachmentId) ([]params.LifeResult, error) 19 Unit(names.UnitTag) (Unit, error) 20 WatchRelationUnits(names.RelationTag, names.UnitTag) (watcher.RelationUnitsWatcher, error) 21 WatchStorageAttachment(names.StorageTag, names.UnitTag) (watcher.NotifyWatcher, error) 22 } 23 24 type Unit interface { 25 Life() params.Life 26 Refresh() error 27 Resolved() (params.ResolvedMode, error) 28 Service() (Service, error) 29 Tag() names.UnitTag 30 Watch() (watcher.NotifyWatcher, error) 31 WatchAddresses() (watcher.NotifyWatcher, error) 32 WatchConfigSettings() (watcher.NotifyWatcher, error) 33 WatchStorage() (watcher.StringsWatcher, error) 34 WatchActionNotifications() (watcher.StringsWatcher, error) 35 } 36 37 type Service interface { 38 CharmURL() (*charm.URL, bool, error) 39 Life() params.Life 40 Refresh() error 41 Tag() names.ServiceTag 42 Watch() (watcher.NotifyWatcher, error) 43 WatchLeadershipSettings() (watcher.NotifyWatcher, error) 44 WatchRelations() (watcher.StringsWatcher, error) 45 } 46 47 type Relation interface { 48 Id() int 49 Life() params.Life 50 } 51 52 func NewAPIState(st *uniter.State) State { 53 return apiState{st} 54 } 55 56 type apiState struct { 57 *uniter.State 58 } 59 60 type apiUnit struct { 61 *uniter.Unit 62 } 63 64 type apiService struct { 65 *uniter.Service 66 } 67 68 type apiRelation struct { 69 *uniter.Relation 70 } 71 72 func (st apiState) Relation(tag names.RelationTag) (Relation, error) { 73 r, err := st.State.Relation(tag) 74 return apiRelation{r}, err 75 } 76 77 func (st apiState) Unit(tag names.UnitTag) (Unit, error) { 78 u, err := st.State.Unit(tag) 79 return apiUnit{u}, err 80 } 81 82 func (u apiUnit) Service() (Service, error) { 83 s, err := u.Unit.Service() 84 return apiService{s}, err 85 }