worker

package
v0.4.0-alpha1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 30, 2018 License: Apache-2.0 Imports: 64 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func SortedIPs

func SortedIPs(ips []string) []string

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

func (*BackoffTimer) Stop

func (b *BackoffTimer) Stop() bool

Stop frees the Timer

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"`
}

func NewConfig

func NewConfig(path string) (*Config, error)

NewConfig creates a new Worker config from the specified YAML file.

type ContainerInfo

type ContainerInfo struct {
	ID           string
	ImageName    string
	StartAt      time.Time
	Ports        nat.PortMap
	PublicKey    ssh.PublicKey
	Cgroup       string
	CgroupParent string
	NetworkIDs   []string
	DealID       string
	// contains filtered or unexported fields
}

ContainerInfo is a brief information about containers

func (*ContainerInfo) IntoProto

func (c *ContainerInfo) IntoProto(ctx context.Context) *pb.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() *pb.ResourceUsage

type DealExtractor

type DealExtractor func(ctx context.Context, request interface{}) (structs.DealID, error)

DealExtractor allows to extract deal id that is used for authorization.

type DealInfoSupplier

type DealInfoSupplier interface {
	GetDealInfo(ctx context.Context, id *sonm.ID) (*sonm.DealInfoReply, error)
}

type Description

type Description struct {
	Reference     reference.Named
	Auth          string
	RestartPolicy container.RestartPolicy
	Resources     *pb.AskPlanResources
	CGroupParent  string
	Cmd           []string
	Env           map[string]string
	TaskId        string
	DealId        string
	CommitOnStop  bool

	GPUDevices []gpu.GPUID
	// contains filtered or unexported fields
}

Description for a target application. TODO: Drop duplication (sonm.Container)

func (*Description) Expose

func (d *Description) Expose() (nat.PortSet, nat.PortMap, error)

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) Mounts

func (d *Description) Mounts(source string) []volume.Mount

func (*Description) Networks

func (d *Description) Networks() []structs.Network

func (*Description) Volumes

func (d *Description) Volumes() map[string]*pb.Volume

type DevConfig

type DevConfig struct {
	DisableMasterApproval bool `yaml:"disable_master_approval"`
}

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 WithConfig(cfg *Config) Option

func WithContext

func WithContext(ctx context.Context) Option

func WithCreds

func WithCreds(creds credentials.TransportCredentials) Option

func WithDWH

func WithDWH(d sonm.DWHClient) Option

func WithETH

func WithETH(e blockchain.API) Option

func WithKey

func WithKey(key *ecdsa.PrivateKey) Option

func WithMatcher

func WithMatcher(matcher matcher.Matcher) Option

func WithOverseer

func WithOverseer(ovs Overseer) Option

func WithPlugins

func WithPlugins(plugins *plugin.Repository) Option

func WithSSH

func WithSSH(ssh SSH) Option

func WithStateStorage

func WithStateStorage(s *state.Storage) Option

func WithVersion

func WithVersion(v string) Option

func WithWhitelist

func WithWhitelist(whitelist Whitelist) Option

type Overseer

type Overseer interface {
	// Load loads an image from the specified reader to the Docker.
	Load(ctx context.Context, rd io.Reader) (imageLoadStatus, 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 pb.TaskStatusReply_Status, ContainerInfo, 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

	// 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)

	// 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

func NewOverseer(ctx context.Context, plugins *plugin.Repository) (Overseer, error)

NewOverseer creates new overseer

type ResourcesConfig

type ResourcesConfig struct {
	Cgroup    string                `required:"true" yaml:"cgroup"`
	Resources *specs.LinuxResources `required:"false" yaml:"resources"`
}

type SSH

type SSH interface {
	Run() error
	Close()
}

func NewSSH

func NewSSH(worker *Worker, config *SSHConfig) (SSH, error)

type SSHConfig

type SSHConfig struct {
	BindEndpoint   string `required:"true" yaml:"bind"`
	PrivateKeyPath string `required:"true" yaml:"private_key_path"`
}

type Whitelist

type Whitelist interface {
	Allowed(ctx context.Context, reference string, auth string) (bool, reference.Named, error)
}

func NewWhitelist

func NewWhitelist(ctx context.Context, config *WhitelistConfig) Whitelist

type WhitelistConfig

type WhitelistConfig struct {
	Url                 string   `yaml:"url"`
	Enabled             *bool    `yaml:"enabled" default:"true" required:"true"`
	PrivilegedAddresses []string `yaml:"privileged_addresses"`
	RefreshPeriod       uint     `yaml:"refresh_period" default:"60"`
}

type WhitelistRecord

type WhitelistRecord struct {
	AllowedHashes []string `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 NewWorker

func NewWorker(opts ...Option) (m *Worker, err error)

func (*Worker) AskPlanByTaskID

func (m *Worker) AskPlanByTaskID(taskID string) (*pb.AskPlan, error)

func (*Worker) AskPlans

func (m *Worker) AskPlans(ctx context.Context, _ *pb.Empty) (*pb.AskPlansReply, error)

func (*Worker) Close

func (m *Worker) Close()

Close disposes all resources related to the Worker

func (*Worker) CollectTasksStatuses

func (m *Worker) CollectTasksStatuses(statuses ...pb.TaskStatusReply_Status) map[string]*pb.TaskStatusReply

func (*Worker) CreateAskPlan

func (m *Worker) CreateAskPlan(ctx context.Context, request *pb.AskPlan) (*pb.ID, error)

func (*Worker) Devices

func (m *Worker) Devices(ctx context.Context, request *pb.Empty) (*pb.DevicesReply, error)

func (*Worker) FreeDevices

func (m *Worker) FreeDevices(ctx context.Context, request *pb.Empty) (*pb.DevicesReply, error)

FreeDevice provides information about unallocated resources that can be turned into ask-plans. TODO: Looks like DevicesReply is not really suitable here

func (*Worker) GetContainerInfo

func (m *Worker) GetContainerInfo(id string) (*ContainerInfo, bool)

func (*Worker) GetDealInfo

func (m *Worker) GetDealInfo(ctx context.Context, id *pb.ID) (*pb.DealInfoReply, error)

func (*Worker) JoinNetwork

func (m *Worker) JoinNetwork(ctx context.Context, request *pb.WorkerJoinNetworkRequest) (*pb.NetworkSpec, error)

TODO: proper request

func (*Worker) PullTask

func (m *Worker) PullTask(request *pb.PullTaskRequest, stream pb.Worker_PullTaskServer) error

func (*Worker) PurgeAskPlans

func (m *Worker) PurgeAskPlans(ctx context.Context, _ *pb.Empty) (*pb.Empty, error)

func (*Worker) PushTask

func (m *Worker) PushTask(stream pb.Worker_PushTaskServer) error

func (*Worker) RemoveAskPlan

func (m *Worker) RemoveAskPlan(ctx context.Context, request *pb.ID) (*pb.Empty, error)

func (*Worker) RunSSH

func (m *Worker) RunSSH() error

func (*Worker) Serve

func (m *Worker) Serve() error

Serve starts handling incoming API gRPC requests

func (Worker) SetupDefaults

func (m Worker) SetupDefaults() error

func (*Worker) StartTask

func (m *Worker) StartTask(ctx context.Context, request *pb.StartTaskRequest) (*pb.StartTaskReply, error)

func (*Worker) Status

func (m *Worker) Status(ctx context.Context, _ *pb.Empty) (*pb.StatusReply, error)

Status returns internal worker statistic

func (*Worker) StopTask

func (m *Worker) StopTask(ctx context.Context, request *pb.ID) (*pb.Empty, error)

Stop request forces to kill container

func (*Worker) TaskLogs

func (m *Worker) TaskLogs(request *pb.TaskLogsRequest, server pb.Worker_TaskLogsServer) error

TaskLogs returns logs from container

func (*Worker) TaskStatus

func (m *Worker) TaskStatus(ctx context.Context, req *pb.ID) (*pb.TaskStatusReply, error)

func (*Worker) Tasks

func (m *Worker) Tasks(ctx context.Context, request *pb.Empty) (*pb.TaskListReply, error)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL