Documentation ¶
Overview ¶
Package exec implements execution of a graph of Action and Events.
- Actions produce Events when they complete. - Events fulfill dependencies of Actions so they can be executed.
Example ¶
- CreateForwardingRule (CFR) depends on the TargetProxyExists (TPE). - CreateTargetProxy (CTP) signals TargetProxyExists (TPE). - CTP does not have dependencies.
Then the execution trace will be CTP -> TPE -> CFR.
Index ¶
- Variables
- func NewParallelExecutor(c cloud.Cloud, pending []Action, opts ...Option) (*parallelExecutor, error)
- func NewSerialExecutor(c cloud.Cloud, pending []Action, opts ...Option) (*serialExecutor, error)
- type Action
- type ActionBase
- type ActionMetadata
- type ActionType
- type ActionWithErr
- type ErrorStrategy
- type Event
- type EventList
- type Executor
- type ExecutorConfig
- type GraphvizTracer
- type Option
- type Result
- type StringEvent
- type TraceEntry
- type TraceSignal
- type Tracer
Constants ¶
This section is empty.
Variables ¶
var (
ErrPendingActions = errors.New("Executor did not process all actions")
)
Functions ¶
Types ¶
type Action ¶
type Action interface { // CanRun returns true if all of the Events this Action is waiting for have // been signaled. CanRun() bool // Signal this Action with the Event that has occurred. Returns true if the // Action was waiting on the Event being Signaled. Signal(Event) bool // Run the Action, performing the operations. Returns a list of Events to // signal and/or any errors that have occurred. Run(context.Context, cloud.Cloud) (EventList, error) // DryRun simulates running the Action. Returns a list of Events to signal. DryRun() EventList // String returns a human-readable representation of the Action for logging. String() string // PendingEvents is the list of events that this Action is still waiting on. PendingEvents() EventList // Metadata returns metadata used for visualizations. Metadata() *ActionMetadata }
Action is an operation that updates external resources. An Action depends on zero or more Events to be Signaled before the Action CanRun.
func NewDoesNotExistAction ¶ added in v1.25.0
func NewDoesNotExistAction(id *cloud.ResourceID) Action
func NewExistsAction ¶
func NewExistsAction(id *cloud.ResourceID) Action
NewExistsAction returns an Action that signals the existence of a Resource. It has no other side effects.
func NewRetriableAction ¶ added in v1.30.0
NewRetriableAction is an Action which check if a given action can be retired after error. On error the action will be retried when canRetry(err) returns true and duration for backoff. Duration equals 0 means that the action needs to be retried right away.
type ActionBase ¶
type ActionBase struct { // Want are the events this action is still waiting for. Want EventList // Done tracks the events that have happened. This is for debugging. Done EventList }
ActionBase is a helper that implements some standard behaviors of common Action implementation.
func (*ActionBase) CanRun ¶
func (b *ActionBase) CanRun() bool
func (*ActionBase) PendingEvents ¶
func (b *ActionBase) PendingEvents() EventList
func (*ActionBase) Signal ¶
func (b *ActionBase) Signal(ev Event) bool
type ActionMetadata ¶
type ActionMetadata struct { // Name of this action. This must be unique to the execution graph. Name string // Type of this action. Type ActionType // Summary is a human readable description of this action. Summary string }
ActionMetadata is used by visualizations.
type ActionType ¶
type ActionType string
var ( ActionTypeCreate ActionType = "Create" ActionTypeDelete ActionType = "Delete" ActionTypeUpdate ActionType = "Update" ActionTypeMeta ActionType = "Meta" ActionTypeCustom ActionType = "Custom" )
type ActionWithErr ¶
type ErrorStrategy ¶
type ErrorStrategy string
ErrorStrategy to use when an Action returns an error.
var ( // ContinueOnError tells the Executor to continue to execute as much of the // plan as possible. Note that the dependencies of failed Actions will // remain pending and not run. ContinueOnError ErrorStrategy = "ContinueOnError" // StopOnError attempts to stop execution early if there are errors. Due to // asynchronous execution, some Actions may continue to be executed after // error detection. StopOnError ErrorStrategy = "StopOnError" )
type Event ¶
type Event interface { // Equal returns true if this event is == to other. Equal(other Event) bool // String implements Stringer. The values returned by String() must satisfy // the same behavior as Equal(), i.e. a.String() == b.String() if and only // if a.Equal(b). String() string }
Event occurs when an Action completes. Events can signal dependent Actions to be available for execution.
func NewDropRefEvent ¶
func NewDropRefEvent(from, to *cloud.ResourceID) Event
NewDropRefEvent returns an event that signals that a resource reference has changed (From no longer refers to To).
func NewExistsEvent ¶
func NewExistsEvent(id *cloud.ResourceID) Event
NewExistsEvent returns and event that signals that the resource ID exists.
func NewNotExistsEvent ¶
func NewNotExistsEvent(id *cloud.ResourceID) Event
NewNotExistsEvent returns and event that signals that the resource ID no longer exists.
type Executor ¶
type Executor interface { // Run the actions. Returns non-nil if there was an error in execution of // one or more Actions. Run(context.Context) (*Result, error) }
Executor performs the operations given by a list of Actions.
type ExecutorConfig ¶
type ExecutorConfig struct { Tracer Tracer DryRun bool ErrorStrategy ErrorStrategy Timeout time.Duration WaitForOrphansTimeout time.Duration }
ExecutorConfig for the executor implementation.
type GraphvizTracer ¶
type GraphvizTracer struct {
// contains filtered or unexported fields
}
GraphvizTracer outputs Graphviz .dot format. This object is thread-safe.
func NewGraphvizTracer ¶
func NewGraphvizTracer() *GraphvizTracer
NewGraphvizTracer returns a new Tracer that outputs Graphviz.
func (*GraphvizTracer) Finish ¶
func (tr *GraphvizTracer) Finish(pending []Action)
func (*GraphvizTracer) Record ¶
func (tr *GraphvizTracer) Record(entry *TraceEntry, err error)
func (*GraphvizTracer) String ¶
func (tr *GraphvizTracer) String() string
type Option ¶
type Option func(*ExecutorConfig)
func DryRunOption ¶
DryRunOption will run in dry run mode if true.
func ErrorStrategyOption ¶
func ErrorStrategyOption(s ErrorStrategy) Option
ErrorStrategyOption sets the error handling strategy.
func TimeoutOption ¶ added in v1.28.0
TimeoutOption sets timeout for executor Run function. This option can be used with parallel executor only.
func TracerOption ¶
TracerOption sets a tracer to accumulate the execution of the Actions.
func WaitForOrphansTimeoutOption ¶ added in v1.28.0
WaitForOrphansTimeoutOption sets timeout for cleaning up the orphans when the executor finishes with error. This option can be used with parallel executor only.
type Result ¶
type Result struct { // Completed Actions with no errors. Completed []Action // Errors are Actions that failed with an error. Errors []ActionWithErr // Pending are Actions that could not be executed due to missing // preconditions. Pending []Action }
type StringEvent ¶
type StringEvent string
StringEvent is an Event identified by a string. This is an easy way to create custom events.
func (StringEvent) Equal ¶
func (e StringEvent) Equal(other Event) bool
func (StringEvent) String ¶
func (e StringEvent) String() string
type TraceEntry ¶
type TraceEntry struct { Action Action Err error Signaled []TraceSignal Start time.Time End time.Time }
TraceEntry represents the execution of an Action.
type TraceSignal ¶
TraceSignal represents the signal of an Event.
type Tracer ¶
type Tracer interface { Record(entry *TraceEntry, err error) Finish(pending []Action) }
Tracer is a sink for tracing an execution.