Documentation ¶
Index ¶
- func NewSSHServer(cfg SSHConfig, signer ssh.Signer, credentials credentials.TransportCredentials, ...) (*sshServer, error)
- type BackoffTimer
- type BenchmarkHasher
- type Config
- type ContainerInfo
- type ContainerMetrics
- type DealExtractor
- type DealInfoSupplier
- type Description
- func (d *Description) DealID() string
- func (d *Description) Expose() (nat.PortSet, nat.PortMap, error)
- func (d *Description) FormatEnv() []string
- func (d *Description) GpuDeviceIDs() []gpu.GPUID
- func (d *Description) ID() string
- func (d *Description) IsGPURequired() bool
- func (d *Description) Mounts(source string) []volume.Mount
- func (d *Description) Network() (string, string)
- func (d *Description) Networks() []*structs.NetworkSpec
- func (d *Description) QuotaID() string
- func (d *Description) QuotaInBytes() uint64
- func (d *Description) Volumes() map[string]*sonm.Volume
- type DevConfig
- type DeviceKeyer
- type ExecConnection
- type Option
- func WithBenchmarkList(list benchmarks.BenchList) Option
- func WithCertRotator(certRotator util.HitlessCertRotator) Option
- func WithConfig(cfg *Config) Option
- func WithContext(ctx context.Context) Option
- func WithCreds(creds credentials.TransportCredentials) Option
- func WithDWH(d sonm.DWHClient) Option
- func WithETH(e blockchain.API) Option
- func WithKey(key *ecdsa.PrivateKey) Option
- func WithMatcher(matcher matcher.Matcher) Option
- func WithOverseer(ovs Overseer) Option
- func WithPlugins(plugins *plugin.Repository) Option
- func WithSSH(ssh SSH) Option
- func WithStateStorage(s *state.Storage) Option
- func WithVersion(v string) Option
- func WithWhitelist(whitelist Whitelist) Option
- type Overseer
- type OverseerView
- type PublicKey
- type ResourcesConfig
- type SSH
- type SSHConfig
- type Whitelist
- type WhitelistConfig
- type WhitelistRecord
- type Worker
- func (m *Worker) AskPlanByTaskID(taskID string) (*sonm.AskPlan, error)
- func (m *Worker) AskPlans(ctx context.Context, _ *sonm.Empty) (*sonm.AskPlansReply, error)
- func (m *Worker) CancelDealTasks(dealID *sonm.BigInt) error
- func (m *Worker) Close()
- func (m *Worker) CollectTasksStatuses(statuses ...sonm.TaskStatusReply_Status) map[string]*sonm.TaskStatusReply
- func (m *Worker) CreateAskPlan(ctx context.Context, request *sonm.AskPlan) (*sonm.ID, error)
- func (m *Worker) DebugState(ctx context.Context, _ *sonm.Empty) (*sonm.DebugStateReply, error)
- func (m *Worker) Devices(ctx context.Context, request *sonm.Empty) (*sonm.DevicesReply, error)
- func (m *Worker) FreeDevices(ctx context.Context, request *sonm.Empty) (*sonm.DevicesReply, error)
- func (m *Worker) GetContainerInfo(id string) (*ContainerInfo, bool)
- func (m *Worker) GetDealInfo(ctx context.Context, id *sonm.ID) (*sonm.DealInfoReply, error)
- func (m *Worker) JoinNetwork(ctx context.Context, request *sonm.WorkerJoinNetworkRequest) (*sonm.NetworkSpec, error)
- func (m *Worker) NextMaintenance(ctx context.Context, _ *sonm.Empty) (*sonm.Timestamp, error)
- func (m *Worker) PullTask(request *sonm.PullTaskRequest, stream sonm.Worker_PullTaskServer) error
- func (m *Worker) PurgeAskPlans(ctx context.Context, _ *sonm.Empty) (*sonm.Empty, error)
- func (m *Worker) PurgeAskPlansDetailed(ctx context.Context, _ *sonm.Empty) (*sonm.ErrorByStringID, error)
- func (m *Worker) PurgeBenchmarks(ctx context.Context, _ *sonm.Empty) (*sonm.Empty, error)
- func (m *Worker) PurgeTasks(ctx context.Context, request *sonm.PurgeTasksRequest) (*sonm.ErrorByStringID, error)
- func (m *Worker) PushTask(stream sonm.Worker_PushTaskServer) error
- func (m *Worker) RemoveAskPlan(ctx context.Context, request *sonm.ID) (*sonm.Empty, error)
- func (m *Worker) RemoveBenchmark(ctx context.Context, id *sonm.NumericID) (*sonm.Empty, error)
- func (m *Worker) RunSSH(ctx context.Context) error
- func (m *Worker) ScheduleMaintenance(ctx context.Context, timestamp *sonm.Timestamp) (*sonm.Empty, error)
- func (m *Worker) Serve() error
- func (m Worker) SetupDefaults() error
- func (m *Worker) StartTask(ctx context.Context, request *sonm.StartTaskRequest) (*sonm.StartTaskReply, error)
- func (m *Worker) Status(ctx context.Context, _ *sonm.Empty) (*sonm.StatusReply, error)
- func (m *Worker) StopTask(ctx context.Context, request *sonm.ID) (*sonm.Empty, error)
- func (m *Worker) TaskLogs(request *sonm.TaskLogsRequest, server sonm.Worker_TaskLogsServer) error
- func (m *Worker) TaskStatus(ctx context.Context, req *sonm.ID) (*sonm.TaskStatusReply, error)
- func (m *Worker) Tasks(ctx context.Context, request *sonm.Empty) (*sonm.TaskListReply, error)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NewSSHServer ¶ added in v0.4.10
func NewSSHServer(cfg SSHConfig, signer ssh.Signer, credentials credentials.TransportCredentials, overseer OverseerView, log *zap.SugaredLogger) (*sshServer, error)
Types ¶
type BackoffTimer ¶
type BackoffTimer struct {
// contains filtered or unexported fields
}
BackoffTimer implementation
func NewBackoffTimer ¶
func NewBackoffTimer(sleep, maxsleep time.Duration) *BackoffTimer
NewBackoffTimer implementations one direction backoff policy
func (*BackoffTimer) C ¶
func (b *BackoffTimer) C() <-chan time.Time
C resets Timer and returns Timer.C
type BenchmarkHasher ¶
type BenchmarkHasher interface { // HardwareHash returns hash of the hardware, empty string means that we need to rebenchmark everytime HardwareHash() string }
type Config ¶
type Config struct { Endpoint string `yaml:"endpoint" required:"true"` Logging logging.Config `yaml:"logging"` Resources *ResourcesConfig `yaml:"resources" required:"false"` Blockchain *blockchain.Config `yaml:"blockchain"` NPP npp.Config `yaml:"npp"` SSH *SSHConfig `yaml:"ssh" required:"false" ` PublicIPs []string `yaml:"public_ip_addrs" required:"false" ` Plugins plugin.Config `yaml:"plugins"` Storage state.StorageConfig `yaml:"store"` Benchmarks benchmarks.Config `yaml:"benchmarks"` Whitelist WhitelistConfig `yaml:"whitelist"` MetricsListenAddr string `yaml:"metrics_listen_addr" default:"127.0.0.1:14000"` DWH dwh.YAMLConfig `yaml:"dwh"` Matcher *matcher.YAMLConfig `yaml:"matcher"` Salesman salesman.YAMLConfig `yaml:"salesman"` Master common.Address `yaml:"master" required:"true"` Development *DevConfig `yaml:"development"` Admin *common.Address `yaml:"admin"` Debug *debug.Config `yaml:"debug"` }
type ContainerInfo ¶
type ContainerInfo struct { ID string ImageName string StartAt time.Time Ports nat.PortMap PublicKey PublicKey Cgroup string CgroupParent string NetworkIDs []string DealID *sonm.BigInt TaskId string Tag *sonm.TaskTag AskID string // contains filtered or unexported fields }
ContainerInfo is a brief information about containers
func (*ContainerInfo) IntoProto ¶
func (c *ContainerInfo) IntoProto(ctx context.Context) *sonm.TaskStatusReply
type ContainerMetrics ¶
type ContainerMetrics struct {
// contains filtered or unexported fields
}
ContainerMetrics are metrics collected from Docker about running containers
func (*ContainerMetrics) Marshal ¶
func (m *ContainerMetrics) Marshal() *sonm.ResourceUsage
type DealExtractor ¶
DealExtractor allows to extract deal id that is used for authorization.
type DealInfoSupplier ¶
type Description ¶
type Description struct { sonm.Container Reference xdocker.Reference Auth string Resources *sonm.AskPlanResources CGroupParent string Cmd []string TaskId string DealId string Autoremove bool GPUDevices []gpu.GPUID NetworkOptions *network.Network NetworkSpecs []*structs.NetworkSpec // contains filtered or unexported fields }
Description for a target application.
func (*Description) DealID ¶ added in v0.4.9
func (d *Description) DealID() string
func (*Description) FormatEnv ¶
func (d *Description) FormatEnv() []string
func (*Description) GpuDeviceIDs ¶
func (d *Description) GpuDeviceIDs() []gpu.GPUID
func (*Description) ID ¶
func (d *Description) ID() string
func (*Description) IsGPURequired ¶
func (d *Description) IsGPURequired() bool
func (*Description) Network ¶ added in v0.4.9
func (d *Description) Network() (string, string)
func (*Description) Networks ¶
func (d *Description) Networks() []*structs.NetworkSpec
func (*Description) QuotaID ¶ added in v0.4.12
func (d *Description) QuotaID() string
func (*Description) QuotaInBytes ¶ added in v0.4.12
func (d *Description) QuotaInBytes() uint64
type DevConfig ¶
type DevConfig struct {
DisableMasterApproval bool `yaml:"disable_master_approval"`
}
type DeviceKeyer ¶
type DeviceKeyer interface {
StorageKey() string
}
type ExecConnection ¶
type ExecConnection types.HijackedResponse
type Option ¶
type Option func(*options)
func WithBenchmarkList ¶
func WithBenchmarkList(list benchmarks.BenchList) Option
func WithCertRotator ¶
func WithCertRotator(certRotator util.HitlessCertRotator) Option
func WithConfig ¶
func WithContext ¶
func WithCreds ¶
func WithCreds(creds credentials.TransportCredentials) Option
func WithETH ¶
func WithETH(e blockchain.API) Option
func WithKey ¶
func WithKey(key *ecdsa.PrivateKey) Option
func WithMatcher ¶
func WithOverseer ¶
func WithPlugins ¶
func WithPlugins(plugins *plugin.Repository) Option
func WithStateStorage ¶
func WithVersion ¶
func WithWhitelist ¶
type Overseer ¶
type Overseer interface { // Load loads an image from the specified reader to the Docker. Load(ctx context.Context, rd io.Reader) (imageID, error) // Save saves an image from the Docker into the returned reader. Save(ctx context.Context, imageID string) (types.ImageInspect, io.ReadCloser, error) // Spool prepares an application for its further start. // // For Docker containers this is an equivalent of pulling from the registry. Spool(ctx context.Context, d Description) error // Start attempts to start an application using the specified description. // // After successful starting an application becomes a target for accepting request, but not guarantees // to complete them. Start(ctx context.Context, description Description) (chan sonm.TaskStatusReply_Status, ContainerInfo, error) // Attach attemps to attach to a running application with a specified description Attach(ctx context.Context, ID string, description Description) (chan sonm.TaskStatusReply_Status, error) // Exec a given command in running container Exec(ctx context.Context, Id string, cmd []string, env []string, isTty bool, wCh <-chan ssh.Window) (types.HijackedResponse, error) // Stop terminates the container. Stop(ctx context.Context, containerID string) error // OnDealFinish makes all cleanup related to closed deal OnDealFinish(ctx context.Context, containerID string) error // Info returns runtime statistics collected from all running containers. // // Depending on the implementation this can be cached. Info(ctx context.Context) (map[string]ContainerMetrics, error) // Logs fetch logs of the container Logs(ctx context.Context, id string, opts types.ContainerLogsOptions) (io.ReadCloser, error) // Close terminates all associated asynchronous operations and prepares the Overseer for shutting down. Close() error }
Overseer watches all worker's applications.
func NewOverseer ¶
NewOverseer creates new overseer
type OverseerView ¶ added in v0.4.10
type OverseerView interface { ContainerInfo(id string) (*ContainerInfo, bool) // ConsumerIdentityLevel returns the consumer identity level by the given // task identifier. ConsumerIdentityLevel(ctx context.Context, id string) (sonm.IdentityLevel, error) ExecIdentity() sonm.IdentityLevel Exec(ctx context.Context, id string, cmd []string, env []string, isTty bool, wCh <-chan sshd.Window) (types.HijackedResponse, error) }
OverseerView is a bridge between keeping "Worker" as a parameter and slightly more decomposed architecture.
type PublicKey ¶ added in v0.4.11
func (PublicKey) MarshalText ¶ added in v0.4.11
func (*PublicKey) UnmarshalText ¶ added in v0.4.11
type ResourcesConfig ¶
type ResourcesConfig struct { Cgroup string `required:"true" yaml:"cgroup"` Resources *specs.LinuxResources `required:"false" yaml:"resources"` }
type Whitelist ¶
type Whitelist interface {
Allowed(ctx context.Context, ref xdocker.Reference, auth string) (bool, xdocker.Reference, error)
}
func NewWhitelist ¶
func NewWhitelist(ctx context.Context, config *WhitelistConfig) Whitelist
type WhitelistConfig ¶
type WhitelistConfig struct { Url string `yaml:"url"` // Deprecated: use PrivilegedIdentityLevel instead. Breaking issue #1470. Enabled *bool `yaml:"enabled" default:"true" required:"true"` PrivilegedAddresses []string `yaml:"privileged_addresses"` RefreshPeriod uint `yaml:"refresh_period" default:"60"` PrivilegedIdentityLevel sonm.IdentityLevel `yaml:"privileged_identity_level" default:"identified"` }
type WhitelistRecord ¶
type WhitelistRecord struct {
AllowedHashes []digest.Digest `json:"allowed_hashes"`
}
type Worker ¶
type Worker struct {
// contains filtered or unexported fields
}
Worker holds information about jobs, make orders to Observer and communicates with Worker
func (*Worker) AskPlanByTaskID ¶
func (*Worker) CancelDealTasks ¶ added in v0.4.13
func (*Worker) CollectTasksStatuses ¶
func (*Worker) CreateAskPlan ¶
func (*Worker) DebugState ¶
func (*Worker) FreeDevices ¶
FreeDevices provides information about unallocated resources that can be turned into ask-plans. Deprecated: no longer usable
func (*Worker) GetContainerInfo ¶
func (m *Worker) GetContainerInfo(id string) (*ContainerInfo, bool)
func (*Worker) GetDealInfo ¶
func (*Worker) JoinNetwork ¶
func (m *Worker) JoinNetwork(ctx context.Context, request *sonm.WorkerJoinNetworkRequest) (*sonm.NetworkSpec, error)
TODO: proper request
func (*Worker) NextMaintenance ¶
func (*Worker) PurgeAskPlans ¶
func (*Worker) PurgeAskPlansDetailed ¶ added in v0.4.13
func (*Worker) PurgeBenchmarks ¶
func (*Worker) PurgeTasks ¶ added in v0.4.13
func (*Worker) RemoveAskPlan ¶
func (*Worker) RemoveBenchmark ¶
func (*Worker) ScheduleMaintenance ¶
func (Worker) SetupDefaults ¶
func (m Worker) SetupDefaults() error