github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/state/interface.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package state 5 6 import ( 7 "github.com/juju/juju/environs/config" 8 "github.com/juju/juju/instance" 9 "github.com/juju/juju/state/api/params" 10 "github.com/juju/juju/tools" 11 "github.com/juju/juju/version" 12 ) 13 14 // EntityFinder is implemented by *State. See State.FindEntity 15 // for documentation on the method. 16 type EntityFinder interface { 17 FindEntity(tag string) (Entity, error) 18 } 19 20 var _ EntityFinder = (*State)(nil) 21 22 // Entity represents any entity that can be returned 23 // by State.FindEntity. All entities have a tag. 24 type Entity interface { 25 Tag() string 26 } 27 28 var ( 29 _ Entity = (*Machine)(nil) 30 _ Entity = (*Unit)(nil) 31 _ Entity = (*Service)(nil) 32 _ Entity = (*Environment)(nil) 33 _ Entity = (*User)(nil) 34 ) 35 36 type StatusSetter interface { 37 SetStatus(status params.Status, info string, data params.StatusData) error 38 } 39 40 type StatusGetter interface { 41 Status() (status params.Status, info string, data params.StatusData, err error) 42 } 43 44 var ( 45 _ StatusSetter = (*Machine)(nil) 46 _ StatusSetter = (*Unit)(nil) 47 _ StatusGetter = (*Machine)(nil) 48 _ StatusGetter = (*Unit)(nil) 49 ) 50 51 // Lifer represents an entity with a life. 52 type Lifer interface { 53 Life() Life 54 } 55 56 var ( 57 _ Lifer = (*Machine)(nil) 58 _ Lifer = (*Unit)(nil) 59 _ Lifer = (*Service)(nil) 60 _ Lifer = (*Relation)(nil) 61 ) 62 63 // AgentTooler is implemented by entities 64 // that have associated agent tools. 65 type AgentTooler interface { 66 AgentTools() (*tools.Tools, error) 67 SetAgentVersion(version.Binary) error 68 } 69 70 // EnsureDeader with an EnsureDead method. 71 type EnsureDeader interface { 72 EnsureDead() error 73 } 74 75 var ( 76 _ EnsureDeader = (*Machine)(nil) 77 _ EnsureDeader = (*Unit)(nil) 78 ) 79 80 // Remover represents entities with a Remove method. 81 type Remover interface { 82 Remove() error 83 } 84 85 var ( 86 _ Remover = (*Machine)(nil) 87 _ Remover = (*Unit)(nil) 88 ) 89 90 // Authenticator represents entites capable of handling password 91 // authentication. 92 type Authenticator interface { 93 Refresh() error 94 SetPassword(pass string) error 95 PasswordValid(pass string) bool 96 } 97 98 var ( 99 _ Authenticator = (*Machine)(nil) 100 _ Authenticator = (*Unit)(nil) 101 _ Authenticator = (*User)(nil) 102 ) 103 104 // MongoPassworder represents an entity that can 105 // have a mongo password set for it. 106 type MongoPassworder interface { 107 SetMongoPassword(password string) error 108 } 109 110 var ( 111 _ MongoPassworder = (*Machine)(nil) 112 _ MongoPassworder = (*Unit)(nil) 113 ) 114 115 // Annotator represents entities capable of handling annotations. 116 type Annotator interface { 117 Annotation(key string) (string, error) 118 Annotations() (map[string]string, error) 119 SetAnnotations(pairs map[string]string) error 120 } 121 122 var ( 123 _ Annotator = (*Machine)(nil) 124 _ Annotator = (*Unit)(nil) 125 _ Annotator = (*Service)(nil) 126 _ Annotator = (*Environment)(nil) 127 ) 128 129 // NotifyWatcherFactory represents an entity that 130 // can be watched. 131 type NotifyWatcherFactory interface { 132 Watch() NotifyWatcher 133 } 134 135 var ( 136 _ NotifyWatcherFactory = (*Machine)(nil) 137 _ NotifyWatcherFactory = (*Unit)(nil) 138 _ NotifyWatcherFactory = (*Service)(nil) 139 _ NotifyWatcherFactory = (*Environment)(nil) 140 ) 141 142 // AgentEntity represents an entity that can 143 // have an agent responsible for it. 144 type AgentEntity interface { 145 Entity 146 Lifer 147 Authenticator 148 MongoPassworder 149 AgentTooler 150 StatusSetter 151 EnsureDeader 152 Remover 153 NotifyWatcherFactory 154 } 155 156 var ( 157 _ AgentEntity = (*Machine)(nil) 158 _ AgentEntity = (*Unit)(nil) 159 ) 160 161 // EnvironAccessor defines the methods needed to watch for environment 162 // config changes, and read the environment config. 163 type EnvironAccessor interface { 164 WatchForEnvironConfigChanges() NotifyWatcher 165 EnvironConfig() (*config.Config, error) 166 } 167 168 var _ EnvironAccessor = (*State)(nil) 169 170 // UnitsWatcher defines the methods needed to retrieve an entity (a 171 // machine or a service) and watch its units. 172 type UnitsWatcher interface { 173 Entity 174 WatchUnits() StringsWatcher 175 } 176 177 var _ UnitsWatcher = (*Machine)(nil) 178 var _ UnitsWatcher = (*Service)(nil) 179 180 // EnvironMachinesWatcher defines a single method - 181 // WatchEnvironMachines. 182 type EnvironMachinesWatcher interface { 183 WatchEnvironMachines() StringsWatcher 184 } 185 186 var _ EnvironMachinesWatcher = (*State)(nil) 187 188 // InstanceIdGetter defines a single method - InstanceId. 189 type InstanceIdGetter interface { 190 InstanceId() (instance.Id, error) 191 } 192 193 var _ InstanceIdGetter = (*Machine)(nil)