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  }