Documentation
¶
Index ¶
- func ByState(i, j *Task) int
- func SortGroupsByCreated(i, j *Group) int
- func StartEnqueuer(tasks *Service)
- func StartRunner(ctx context.Context, logger logging.Interface, tasks *Service, maxTasks int) func()
- func StripError(s string) string
- type Dependencies
- type Execution
- type Group
- type Identifier
- type ListOptions
- type Service
- func (s *Service) AddGroup(group *Group)
- func (s *Service) Cancel(taskID resource.ID) (*Task, error)
- func (s *Service) Counter() int
- func (s *Service) Create(spec Spec) (*Task, error)
- func (s *Service) CreateGroup(specs ...Spec) (*Group, error)
- func (s *Service) Delete(taskID resource.ID) error
- func (s *Service) Enqueue(taskID resource.ID) (*Task, error)
- func (s *Service) Get(taskID resource.ID) (*Task, error)
- func (s *Service) GetGroup(groupID resource.ID) (*Group, error)
- func (s *Service) List(opts ListOptions) []*Task
- func (s *Service) ListGroups() []*Group
- type ServiceOptions
- type Spec
- type SpecFunc
- type Status
- type Summary
- type Task
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ByState ¶
ByState sorts tasks according to the following order:
1. running (ordered by last updated desc) 2. queued (ordered by last updated asc) 3. pending (ordered by last updated asc) 4. finished (ordered by last updated desc)
func SortGroupsByCreated ¶ added in v0.2.0
func StartEnqueuer ¶
func StartEnqueuer(tasks *Service)
func StartRunner ¶
func StartRunner(ctx context.Context, logger logging.Interface, tasks *Service, maxTasks int) func()
StartRunner starts the task runner and returns a function that waits for running tasks to finish.
func StripError ¶ added in v0.6.0
Types ¶
type Dependencies ¶ added in v0.5.2
type Dependencies struct {
ModuleIDs []resource.ID
// InverseDependencyOrder inverts the order of module dependencies, i.e. if
// module A depends on module B, then a task specified for module B will
// only be started once any tasks specified on module A have completed. This
// is useful when carrying out a `terraform destroy`. All specs in the task
// group must set InverseDependencyOrder to the same value otherwise an
// error is raised.
InverseDependencyOrder bool
}
Dependencies specifies that the task respect its module's dependencies: any tasks belonging to the its module's dependencies must have finished successfully before this task can be started. This only makes sense in the context of a task group, in which multiple tasks are created.
type Execution ¶ added in v0.5.2
type Execution struct {
// Program to execute. Defaults to the `program` pug config option.
Program string
// Terraform command, including sub commands, e.g. plan, state rm, etc.
// Ignored if Program is non-empty.
TerraformCommand []string
// Args to pass to program.
Args []string
}
Execution specifies the program and arguments to execute
type Group ¶ added in v0.2.0
type Identifier ¶ added in v0.5.2
type Identifier string
Identifier uniquely identifies the type of task.
type ListOptions ¶
type ListOptions struct {
// Filter tasks by those with a matching module path. Optional.
Path *string
// Filter tasks by status: match task if it has one of these statuses.
// Optional.
Status []Status
// Order tasks by oldest first (true), or newest first (false)
Oldest bool
// Filter tasks by only those that are blocking. If false, both blocking and
// non-blocking tasks are returned.
Blocking bool
// Only return those tasks that are exclusive. If false, both exclusive and
// non-exclusive tasks are returned.
Exclusive bool
}
type Service ¶
type Service struct {
TaskBroker *pubsub.Broker[*Task]
GroupBroker *pubsub.Broker[*Group]
// contains filtered or unexported fields
}
func NewService ¶
func NewService(opts ServiceOptions) *Service
func (*Service) Create ¶
Create a task. The task is placed into a pending state and requires enqueuing before it'll be processed.
func (*Service) CreateGroup ¶ added in v0.2.0
Create a task group from one or more task specs. An error is returned if zero specs are provided, or if it fails to create at least one task.
func (*Service) List ¶
func (s *Service) List(opts ListOptions) []*Task
func (*Service) ListGroups ¶ added in v0.2.0
type ServiceOptions ¶
type Spec ¶ added in v0.5.0
type Spec struct {
// ModuleID is the ID of the module the task belongs to. If nil, the task
// does not belong to a module
ModuleID *resource.ID
// WorkspaceID is the ID of the workspace the task belongs to. If nil, the
// task does not belong to a workspace.
WorkspaceID *resource.ID
// TaskGroupID specifies the ID of the task group this task is to belong to.
// Nil means the task does not belong to a group.
TaskGroupID *resource.ID
// Execution specifies the execution of a program.
Execution Execution
// AdditionalExecution specifies the execution of another program. The
// program is only executed if the first program exits successfully.
AdditionalExecution *Execution
// Identifier uniquely identifies the type of task.
Identifier Identifier
// Path relative to the pug working directory in which to run the command.
Path string
// Environment variables.
Env []string
// A blocking task blocks other tasks from running on the module or
// workspace.
Blocking bool
// Globally exclusive task - at most only one such task can be running
Exclusive bool
// Set to true to indicate that the task produces JSON output
JSON bool
// Skip queue and immediately start task
Immediate bool
// Short if true indicates that the task runtime is short and the output is
// minimal.
Short bool
// Wait blocks until the task has finished
Wait bool
// Description assigns an optional description to the task to display to the
// user, overriding the default of displaying the command.
Description string
// Call this function before the task has successfully finished. The
// returned string sets the task summary, and the error, if non-nil, deems
// the task to have failed and places the task into an errored state.
BeforeExited func(*Task) (Summary, error)
// Call this function after the task has successfully finished
AfterExited func(*Task)
// Call this function after the task is enqueued.
AfterQueued func(*Task)
// Call this function after the task starts running.
AfterRunning func(*Task)
// Call this function after the task fails with an error
AfterError func(*Task)
// Call this function after the task is successfully canceled
AfterCanceled func(*Task)
// Call this function after the task is successfully created
AfterCreate func(*Task)
// Call this function after the task terminates for whatever reason.
AfterFinish func(*Task)
// Dependencies specifies that the task respect its module's dependencies.
// Only makes sense when the task is specified as part of a task group. All
// specs in the task group must set Dependencies to either nil, or to
// non-nil.
Dependencies *Dependencies
// contains filtered or unexported fields
}
Spec is a specification for creating a task.
type Summary ¶ added in v0.5.0
type Summary interface {
String() string
}
Summary summarises the outcome of a task.
type Task ¶
type Task struct {
resource.ID
ModuleID *resource.ID
WorkspaceID *resource.ID
TaskGroupID *resource.ID
Identifier Identifier
Program string
Args []string
AdditionalExecution *Execution
Path string
Blocking bool
State Status
JSON bool
Immediate bool
Short bool
AdditionalEnv []string
DependsOn []resource.ID
// Summary summarises the outcome of a task to the end-user.
Summary Summary
Description string
Created time.Time
Updated time.Time
// Nil until task finishes with an error
Err error
// Retain a copy of the Spec used to originally create the task so that
// the task can be retried.
Spec Spec
AfterCreate func(*Task)
AfterQueued func(*Task)
AfterRunning func(*Task)
BeforeExited func(*Task) (Summary, error)
AfterExited func(*Task)
AfterError func(*Task)
AfterCanceled func(*Task)
AfterFinish func(*Task)
// contains filtered or unexported fields
}
Task is an execution of a CLI program.
func (*Task) NewReader ¶
NewReader returns a reader which contains what has been written thus far to the task buffer. Set combined to true to receieve stderr as well as stdout.
func (*Task) NewStreamer ¶ added in v0.5.2
NewStreamer returns a stream of output from the task; the channel is closed when the task has finished.