Andrey Smirnov 2144b6a099 feat: add names to tasks and phases
For each task, name follow function name for now (but it could be
customized if needed).

Phases are after main theme of the tasks inside the phase.

Task and phase events are now displayed in `talosctl events`.

Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
2020-07-10 13:09:50 -07:00

55 lines
1.4 KiB
Go

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package runtime
import (
"context"
"log"
)
// TaskSetupFunc defines the function that a task will execute for a specific runtime
// mode.
type TaskSetupFunc func(seq Sequence, data interface{}) (TaskExecutionFunc, string)
// TaskExecutionFunc defines the function that a task will execute for a specific runtime
// mode.
type TaskExecutionFunc func(context.Context, *log.Logger, Runtime) error
// Phase represents a collection of tasks to be performed concurrently.
type Phase struct {
Name string
Tasks []TaskSetupFunc
}
// ControllerOptions represents the options for a controller.
type ControllerOptions struct {
Force bool
}
// ControllerOption represents an option setter.
type ControllerOption func(o *ControllerOptions) error
// WithForce sets the force option to true.
func WithForce() ControllerOption {
return func(o *ControllerOptions) error {
o.Force = true
return nil
}
}
// DefaultControllerOptions returns the default controller options.
func DefaultControllerOptions() ControllerOptions {
return ControllerOptions{}
}
// Controller represents the controller responsible for managing the execution
// of sequences.
type Controller interface {
Runtime() Runtime
Sequencer() Sequencer
Run(Sequence, interface{}, ...ControllerOption) error
}