runnerpool

package
v0.97.2 Latest Latest
Warning

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

Go to latest
Published: Jan 9, 2026 License: MIT Imports: 29 Imported by: 0

Documentation

Overview

Package runnerpool provides a runner implementation based on a pool pattern for executing multiple units concurrently.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Build

func Build(
	ctx context.Context,
	l log.Logger,
	terragruntOptions *options.TerragruntOptions,
	opts ...common.Option,
) (common.StackRunner, error)

Build stack runner using discovery and queueing mechanisms.

func BuildCanonicalConfigPath added in v0.97.0

func BuildCanonicalConfigPath(
	unit *component.Unit,
	basePath string,
) (canonicalConfigPath string, canonicalDir string, err error)

BuildCanonicalConfigPath computes the canonical config path for a unit. It handles .hcl/.json suffixes, joins an appropriate config filename when needed, converts to canonical absolute path, and updates the unit's path. Returns the canonical config path and the canonical unit directory.

func CloneUnitOptions added in v0.97.0

func CloneUnitOptions(
	stack *component.Stack,
	unit *component.Unit,
	canonicalConfigPath string,
	stackDefaultDownloadDir string,
	l log.Logger,
) (*options.TerragruntOptions, log.Logger, error)

CloneUnitOptions clones TerragruntOptions for a specific unit. It handles CloneWithConfigPath, per-unit DownloadDir fallback, and OriginalTerragruntConfigPath. Returns the cloned options and logger, or the original logger if stack has no options.

func FilterDiscoveredUnits added in v0.89.0

func FilterDiscoveredUnits(discovered component.Components, units []*component.Unit) component.Components

FilterDiscoveredUnits removes configs for units flagged as excluded and prunes dependencies that point to excluded units. This keeps the execution queue and any user-facing listings free from units not intended to run.

Inputs:

  • discovered: raw discovery results (paths and dependency edges)
  • units: resolved units (slice), where exclude rules have already been applied

Behavior:

  • A config is included only if there's a corresponding unit and its FlagExcluded is false.
  • For each included config, its Dependencies list is filtered to only include included configs.
  • The function returns a new slice with shallow-copied entries so the original discovery results remain unchanged.

func NewRunnerPoolStack

func NewRunnerPoolStack(
	ctx context.Context,
	l log.Logger,
	terragruntOptions *options.TerragruntOptions,
	discovered component.Components,
	opts ...common.Option,
) (common.StackRunner, error)

NewRunnerPoolStack creates a new stack from discovered units.

func ShouldSkipUnitWithoutTerraform added in v0.97.0

func ShouldSkipUnitWithoutTerraform(unit *component.Unit, dir string, l log.Logger) (bool, error)

ShouldSkipUnitWithoutTerraform checks if a unit should be skipped because it has neither a Terraform source nor any Terraform/OpenTofu files in its directory. Returns true if the unit should be skipped, false otherwise.

Types

type Controller added in v0.83.2

type Controller struct {
	// contains filtered or unexported fields
}

Controller orchestrates concurrent execution over a DAG.

func NewController added in v0.83.2

func NewController(q *queue.Queue, units []*component.Unit, opts ...ControllerOption) *Controller

NewController creates a new Controller with the given options and a pre-built queue.

func (*Controller) Run added in v0.83.2

func (dr *Controller) Run(ctx context.Context, l log.Logger) error

Run executes the Queue return error summarizing all entries that failed to run.

type ControllerOption added in v0.83.2

type ControllerOption func(*Controller)

ControllerOption is a function that modifies a Controller.

func WithMaxConcurrency

func WithMaxConcurrency(concurrency int) ControllerOption

WithMaxConcurrency sets the concurrency for the Controller.

func WithRunner

func WithRunner(runner UnitRunner) ControllerOption

WithRunner sets the UnitRunner for the Controller.

type Runner

type Runner struct {
	Stack *component.Stack
	// contains filtered or unexported fields
}

Runner implements the Stack interface for runner pool execution.

func (*Runner) GetStack

func (r *Runner) GetStack() *component.Stack

GetStack returns the stack associated with the runner.

func (*Runner) JSONUnitDeployOrder

func (r *Runner) JSONUnitDeployOrder(_ string) (string, error)

JSONUnitDeployOrder returns the order of units to be processed for a given Terraform command in JSON format.

func (*Runner) ListStackDependentUnits

func (r *Runner) ListStackDependentUnits() map[string][]string

ListStackDependentUnits returns a map of units and their dependent units in the stack.

func (*Runner) LogUnitDeployOrder

func (r *Runner) LogUnitDeployOrder(l log.Logger, terraformCommand string) error

LogUnitDeployOrder logs the order of units to be processed for a given Terraform command.

func (*Runner) Run

Run executes the stack according to TerragruntOptions and returns the first error (or a joined error) once execution is finished.

func (*Runner) SetReport

func (r *Runner) SetReport(rpt *report.Report)

SetReport sets the report for the stack.

func (*Runner) WithOptions

func (r *Runner) WithOptions(opts ...common.Option) *Runner

WithOptions updates the stack with the provided options.

type UnitRunner added in v0.83.2

type UnitRunner func(ctx context.Context, u *component.Unit) error

UnitRunner defines a function type that executes a Unit within a given context and returns an error.

type UnitWriter added in v0.94.0

type UnitWriter struct {
	// contains filtered or unexported fields
}

UnitWriter buffers output for a single unit and flushes incrementally during execution. This prevents interleaved output when multiple units run in parallel while ensuring output appears in real-time during execution, not just at completion.

func NewUnitWriter added in v0.94.0

func NewUnitWriter(out io.Writer) *UnitWriter

NewUnitWriter returns a new UnitWriter instance.

func (*UnitWriter) Flush added in v0.94.0

func (writer *UnitWriter) Flush() error

Flush flushes all buffered data to the output writer.

func (*UnitWriter) ParentWriter added in v0.94.0

func (writer *UnitWriter) ParentWriter() io.Writer

ParentWriter returns the underlying output writer that this UnitWriter wraps.

func (*UnitWriter) Write added in v0.94.0

func (writer *UnitWriter) Write(p []byte) (int, error)

Jump to

Keyboard shortcuts

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