mirror of
https://github.com/siderolabs/talos.git
synced 2025-10-08 22:21:16 +02:00
Fix `Talos` sequencer to run only a single sequence at the same time. Sequences priority was updated. To match the table: | what is running (columns) what is requested (rows) | boot | reboot | reset | upgrade | |----------------------------------------------------|------|--------|-------|---------| | reboot | Y | Y | Y | N | | reset | Y | N | N | N | | upgrade | Y | N | N | N | With a small addition that `WithTakeover` is still there. If set, priority is ignored. This is mainly used for `Shutdown` sequence invokation. And if doing apply config with reboot enabled. Signed-off-by: Artem Chernyshev <artem.chernyshev@talos-systems.com>
64 lines
1.7 KiB
Go
64 lines
1.7 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"
|
|
|
|
"github.com/cosi-project/runtime/pkg/controller"
|
|
)
|
|
|
|
// 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
|
|
}
|
|
|
|
// LockOptions represents the options for a controller.
|
|
type LockOptions struct {
|
|
Takeover bool
|
|
}
|
|
|
|
// LockOption represents an option setter.
|
|
type LockOption func(o *LockOptions) error
|
|
|
|
// WithTakeover sets the take option to true.
|
|
func WithTakeover() LockOption {
|
|
return func(o *LockOptions) error {
|
|
o.Takeover = true
|
|
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// DefaultControllerOptions returns the default controller options.
|
|
func DefaultControllerOptions() LockOptions {
|
|
return LockOptions{}
|
|
}
|
|
|
|
// Controller represents the controller responsible for managing the execution
|
|
// of sequences.
|
|
type Controller interface {
|
|
Runtime() Runtime
|
|
Sequencer() Sequencer
|
|
Run(context.Context, Sequence, interface{}, ...LockOption) error
|
|
V1Alpha2() V1Alpha2Controller
|
|
}
|
|
|
|
// V1Alpha2Controller provides glue into v2alpha1 controller runtime.
|
|
type V1Alpha2Controller interface {
|
|
Run(context.Context, *Drainer) error
|
|
DependencyGraph() (*controller.DependencyGraph, error)
|
|
}
|