Documentation
¶
Overview ¶
Package platform will hold abstractions and data types common to supported platforms. We don't know what all of those will look like, yet. So the package is mostly empty.
Index ¶
- Variables
- func ClusterError(err error) error
- func PlatformTestBattery(t *testing.T, wrap func(mock Platform) Platform)
- func UnavailableError(err error) error
- func UpgradeNeededError(err error) error
- type ApplyError
- type BusMetrics
- type Connecter
- type Container
- type ContainersOrExcuse
- type FatalError
- type MessageBus
- type MockPlatform
- func (p *MockPlatform) AllServices(ns string, ss flux.ServiceIDSet) ([]Service, error)
- func (p *MockPlatform) Apply(defs []ServiceDefinition) error
- func (p *MockPlatform) Export() ([]byte, error)
- func (p *MockPlatform) Ping() error
- func (p *MockPlatform) SomeServices(ss []flux.ServiceID) ([]Service, error)
- func (p *MockPlatform) Sync(def SyncDef) error
- func (p *MockPlatform) Version() (string, error)
- type Platform
- type PlatformV4
- type PlatformV5
- type ResourceDef
- type Service
- type ServiceDefinition
- type StandaloneMessageBus
- func (s *StandaloneMessageBus) Connect(inst flux.InstanceID) (Platform, error)
- func (s *StandaloneMessageBus) Ping(inst flux.InstanceID) error
- func (s *StandaloneMessageBus) Subscribe(inst flux.InstanceID, p Platform, complete chan<- error)
- func (s *StandaloneMessageBus) Version(inst flux.InstanceID) (string, error)
- type SyncAction
- type SyncDef
- type SyncError
Constants ¶
This section is empty.
Variables ¶
var ( ErrEmptySelector = errors.New("empty selector") ErrWrongResourceKind = errors.New("new definition does not match existing resource") ErrNoMatchingService = errors.New("no matching service") ErrServiceHasNoSelector = errors.New("service has no selector") ErrNoMatching = errors.New("no matching replication controllers or deployments") ErrMultipleMatching = errors.New("multiple matching replication controllers or deployments") ErrNoMatchingImages = errors.New("no matching images") )
These errors all represent logical problems with platform configuration, and may be recoverable; e.g., it might be fine if a service does not have a matching RC/deployment.
var ( BusMetricsImpl = BusMetrics{ KickCount: prometheus.NewCounterFrom(stdprometheus.CounterOpts{ Namespace: "flux", Subsystem: "bus", Name: "kick_total", Help: "Count of bus subscriptions kicked off by a newer subscription.", }, []string{}), } )
Functions ¶
func ClusterError ¶
func PlatformTestBattery ¶
func UnavailableError ¶
func UpgradeNeededError ¶
Types ¶
type ApplyError ¶
func (ApplyError) Error ¶
func (e ApplyError) Error() string
type BusMetrics ¶
BusMetrics has metrics for messages buses.
func (BusMetrics) IncrKicks ¶
func (m BusMetrics) IncrKicks(inst flux.InstanceID)
type Connecter ¶
type Connecter interface {
// Connect returns a platform for the instance specified. An error
// is returned only if there is a problem (possibly transient)
// with the underlying mechanism (i.e., not if the platform is
// simply not known to be connected at this time).
Connect(inst flux.InstanceID) (Platform, error)
}
For getting a connection to a platform; this can happen in different ways, e.g., by having direct access to Kubernetes in standalone mode, or by going via a message bus.
type Container ¶
A Container represents a container specification in a pod. The Name identifies it within the pod, and the Image says which image it's configured to run.
type ContainersOrExcuse ¶
Sometimes we care if we can't find the containers for a service, sometimes we just want the information we can get.
type FatalError ¶
type FatalError struct {
Err error
}
Wrap errors in this to indicate that the platform should be considered dead, and disconnected.
func (FatalError) Error ¶
func (err FatalError) Error() string
type MessageBus ¶
type MessageBus interface {
Connecter
// Subscribe registers a platform as the daemon for the instance
// specified.
Subscribe(inst flux.InstanceID, p Platform, done chan<- error)
// Ping returns nil if the daemon for the instance given is known
// to be connected, or ErrPlatformNotAvailable otherwise. NB this
// differs from the semantics of `Connecter.Connect`.
Ping(inst flux.InstanceID) error
}
MessageBus handles routing messages to/from the matching platform.
type MockPlatform ¶
type MockPlatform struct {
AllServicesArgTest func(string, flux.ServiceIDSet) error
AllServicesAnswer []Service
AllServicesError error
SomeServicesArgTest func([]flux.ServiceID) error
SomeServicesAnswer []Service
SomeServicesError error
ApplyArgTest func([]ServiceDefinition) error
ApplyError error
PingError error
VersionAnswer string
VersionError error
ExportAnswer []byte
ExportError error
SyncArgTest func(SyncDef) error
SyncError error
}
func (*MockPlatform) AllServices ¶
func (p *MockPlatform) AllServices(ns string, ss flux.ServiceIDSet) ([]Service, error)
func (*MockPlatform) Apply ¶
func (p *MockPlatform) Apply(defs []ServiceDefinition) error
func (*MockPlatform) Export ¶
func (p *MockPlatform) Export() ([]byte, error)
func (*MockPlatform) Ping ¶
func (p *MockPlatform) Ping() error
func (*MockPlatform) SomeServices ¶
func (p *MockPlatform) SomeServices(ss []flux.ServiceID) ([]Service, error)
func (*MockPlatform) Sync ¶
func (p *MockPlatform) Sync(def SyncDef) error
func (*MockPlatform) Version ¶
func (p *MockPlatform) Version() (string, error)
type Platform ¶
type Platform interface {
PlatformV5
}
Platform is the interface various platforms fulfill, e.g. *kubernetes.Cluster
func Instrument ¶
type PlatformV4 ¶
type PlatformV5 ¶
type PlatformV5 interface {
PlatformV4
// Additional methods accumulate here as we develop V5
Export() ([]byte, error)
Sync(SyncDef) error
}
type ResourceDef ¶
type ResourceDef []byte
Yep, resources are defined by opaque bytes. It's up to the platform at the other end to do the right thing.
type Service ¶
type Service struct {
ID flux.ServiceID
IP string
Metadata map[string]string // a grab bag of goodies, likely platform-specific
Status string // A status summary for display
Containers ContainersOrExcuse
}
Service describes a platform service, generally a floating IP with one or more exposed ports that map to a load-balanced pool of instances. Eventually this type will generalize to something of a lowest-common-denominator for all supported platforms, but right now it looks a lot like a Kubernetes service.
func (Service) ContainersOrError ¶
func (Service) ContainersOrNil ¶
type ServiceDefinition ¶
type ServiceDefinition struct {
ServiceID flux.ServiceID
NewDefinition []byte // of the pod controller e.g. deployment
Async bool // Should this definition be applied without waiting for the result.
}
ServiceDefinition is provided to platform.Apply method/s.
type StandaloneMessageBus ¶
func NewStandaloneMessageBus ¶
func NewStandaloneMessageBus(metrics BusMetrics) *StandaloneMessageBus
func (*StandaloneMessageBus) Connect ¶
func (s *StandaloneMessageBus) Connect(inst flux.InstanceID) (Platform, error)
Connect hands back a platform, given an instance ID. Since the platform will not always be connected, and we want to be able to process operations that don't involve a platform (like setting config), we have a special value for a disconnected platform, rather than returning an error.
func (*StandaloneMessageBus) Ping ¶
func (s *StandaloneMessageBus) Ping(inst flux.InstanceID) error
Ping returns nil if the specified instance is connected, and an error if not.
func (*StandaloneMessageBus) Subscribe ¶
func (s *StandaloneMessageBus) Subscribe(inst flux.InstanceID, p Platform, complete chan<- error)
Subscribe introduces a Platform to the message bus, so that requests can be routed to it. Once the connection is closed -- trying to use it is the only way to tell if it's closed -- the error representing the cause will be sent to the channel supplied.
func (*StandaloneMessageBus) Version ¶
func (s *StandaloneMessageBus) Version(inst flux.InstanceID) (string, error)
Version returns the fluxd version for the connected instance if the specified instance is connected, and an error if not.
type SyncAction ¶
type SyncAction struct {
// The ID is just a handle for labeling any error. No other
// meaning is attached to it.
ResourceID string
Delete ResourceDef
Apply ResourceDef
}
The action(s) to take on a particular resource. This should just be done in order, i.e.,:
- delete if something in Delete
- apply if something in Apply
type SyncDef ¶
type SyncDef struct {
// The actions to undertake
Actions []SyncAction
}
Directories
¶
| Path | Synopsis |
|---|---|
|
Package kubernetes provides abstractions for the Kubernetes platform.
|
Package kubernetes provides abstractions for the Kubernetes platform. |