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)