Documentation ¶
Overview ¶
Package run is responsible for OTF runs, the primary mechanism for executing terraform
Index ¶
- Constants
- Variables
- func CompilePlanReports(planJSON []byte) (resources Report, outputs Report, err error)
- func NewCommand(api *otfapi.Client) *cobra.Command
- func NewService(opts Options) *service
- type CLI
- type Change
- type ChangeAction
- type Client
- func (c *Client) FinishPhase(ctx context.Context, id string, phase internal.PhaseType, ...) (*Run, error)
- func (c *Client) GetLockFile(ctx context.Context, runID string) ([]byte, error)
- func (c *Client) GetPlanFile(ctx context.Context, runID string, format PlanFormat) ([]byte, error)
- func (c *Client) GetRun(ctx context.Context, runID string) (*Run, error)
- func (c *Client) ListRuns(ctx context.Context, opts ListOptions) (*resource.Page[*Run], error)
- func (c *Client) StartPhase(ctx context.Context, id string, phase internal.PhaseType, ...) (*Run, error)
- func (c *Client) UploadLockFile(ctx context.Context, runID string, lockfile []byte) error
- func (c *Client) UploadPlanFile(ctx context.Context, runID string, plan []byte, format PlanFormat) error
- func (c *Client) Watch(ctx context.Context, opts WatchOptions) (<-chan pubsub.Event, error)
- type ConfigurationVersionService
- type CreateOptions
- type ListOptions
- type Operation
- type Options
- type OrganizationService
- type Phase
- type PhaseFinishOptions
- type PhaseStartOptions
- type PhaseStatus
- type PhaseStatusTimestamp
- type PlanFile
- type PlanFileOptions
- type PlanFormat
- type Report
- type Reporter
- type ReporterOptions
- type ResourceChange
- type Run
- func (r *Run) CanAccessOrganization(action rbac.Action, name string) bool
- func (*Run) CanAccessSite(action rbac.Action) bool
- func (r *Run) CanAccessWorkspace(action rbac.Action, policy *internal.WorkspacePolicy) bool
- func (r *Run) Cancel() error
- func (r *Run) Cancelable() bool
- func (r *Run) Confirmable() bool
- func (r *Run) Discard() error
- func (r *Run) Discardable() bool
- func (r *Run) Done() bool
- func (r *Run) EnqueueApply() error
- func (r *Run) EnqueuePlan() error
- func (r *Run) Finish(phase internal.PhaseType, opts PhaseFinishOptions) error
- func (r *Run) ForceCancel() error
- func (r *Run) HasApply() bool
- func (r *Run) HasChanges() bool
- func (r *Run) IsAPISource() bool
- func (r *Run) IsCLISource() bool
- func (r *Run) IsGithubSource() bool
- func (r *Run) IsGitlabSource() bool
- func (r *Run) IsUISource() bool
- func (r *Run) Phase() internal.PhaseType
- func (r *Run) Queued() bool
- func (r *Run) Start(phase internal.PhaseType) error
- func (r *Run) StatusTimestamp(status internal.RunStatus) (time.Time, error)
- type RunService
- type Service
- type Source
- type Spawner
- type StatusTimestamp
- type VCSProviderService
- type Variable
- type WatchOptions
- type WorkspaceService
Constants ¶
const ReporterLockID int64 = 179366396344335597
ReporterLockID is a unique ID guaranteeing only one reporter on a cluster is running at any time.
Variables ¶
var ErrInvalidRunStateTransition = errors.New("invalid run state transition")
Functions ¶
func CompilePlanReports ¶ added in v0.0.51
CompilePlanReports compiles reports of planned changes from a JSON representation of a plan file: one report for planned *resources*, and another for planned *outputs*.
func NewService ¶
func NewService(opts Options) *service
Types ¶
type CLI ¶ added in v0.1.9
type CLI struct { Service configversion.ConfigurationVersionService }
type Change ¶
type Change struct {
Actions []ChangeAction
}
Change represents the type of change being made
type ChangeAction ¶
type ChangeAction string
const ( CreateAction ChangeAction = "create" UpdateAction ChangeAction = "update" DeleteAction ChangeAction = "delete" )
type Client ¶
type Client struct { internal.JSONAPIClient otfapi.Config // Client does not implement all of service yet Service }
func (*Client) FinishPhase ¶
func (*Client) GetLockFile ¶
func (*Client) GetPlanFile ¶
func (*Client) StartPhase ¶
func (*Client) UploadLockFile ¶
func (*Client) UploadPlanFile ¶
type ConfigurationVersionService ¶
type ConfigurationVersionService configversion.Service
type CreateOptions ¶ added in v0.1.8
type CreateOptions struct { IsDestroy *bool Refresh *bool RefreshOnly *bool Message *string // Specifies the configuration version to use for this run. If the // configuration version ID is nil, the run will be created using the // workspace's latest configuration version. ConfigurationVersionID *string TargetAddrs []string ReplaceAddrs []string AutoApply *bool Source Source TerraformVersion *string AllowEmptyApply *bool // PlanOnly specifies if this is a speculative, plan-only run that // Terraform cannot apply. Takes precedence over whether the // configuration version is marked as speculative or not. PlanOnly *bool Variables []Variable }
CreateOptions represents the options for creating a new run. See api.types.RunCreateOptions for documentation on each field.
type ListOptions ¶ added in v0.1.8
type ListOptions struct { resource.PageOptions // Filter by workspace ID WorkspaceID *string `schema:"workspace_id,omitempty"` // Filter by organization name Organization *string `schema:"organization_name,omitempty"` // Filter by workspace name WorkspaceName *string `schema:"workspace_name,omitempty"` // Filter by run statuses (with an implicit OR condition) Statuses []internal.RunStatus `schema:"statuses,omitempty"` // Filter by plan-only runs PlanOnly *bool `schema:"-"` // Filter by sources Sources []Source // Filter by commit SHA that triggered a run CommitSHA *string // Filter by VCS user's username that triggered a run VCSUsername *string }
ListOptions are options for paginating and filtering a list of runs
type Options ¶
type Options struct { WorkspaceAuthorizer internal.Authorizer VCSEventSubscriber vcs.Subscriber OrganizationService WorkspaceService ConfigurationVersionService VCSProviderService releases.ReleasesService logr.Logger internal.Cache *sql.DB *tfeapi.Responder *surl.Signer html.Renderer *pubsub.Broker }
type OrganizationService ¶ added in v0.1.8
type OrganizationService organization.Service
type Phase ¶
type Phase struct { RunID string `json:"run_id"` Status PhaseStatus `json:"status"` StatusTimestamps []PhaseStatusTimestamp `json:"status_timestamps"` internal.PhaseType `json:"phase"` // report of planned or applied resource changes ResourceReport *Report `json:"resource_report"` // report of planned or applied output changes OutputReport *Report `json:"output_report"` }
Phase is a section of work performed by a run.
func (*Phase) HasChanges ¶
func (*Phase) StatusTimestamp ¶
func (p *Phase) StatusTimestamp(status PhaseStatus) (time.Time, error)
StatusTimestamp looks up the timestamp for a status
func (*Phase) UpdateStatus ¶
func (p *Phase) UpdateStatus(status PhaseStatus)
type PhaseFinishOptions ¶
type PhaseFinishOptions struct {
Errored bool `json:"errored,omitempty"`
}
PhaseFinishOptions report the status of a phase upon finishing.
type PhaseStartOptions ¶
type PhaseStatus ¶
type PhaseStatus string
const ( PhasePending PhaseStatus = "pending" PhaseQueued PhaseStatus = "queued" PhaseRunning PhaseStatus = "running" PhaseFinished PhaseStatus = "finished" PhaseCanceled PhaseStatus = "canceled" PhaseErrored PhaseStatus = "errored" PhaseUnreachable PhaseStatus = "unreachable" )
func (PhaseStatus) String ¶
func (s PhaseStatus) String() string
type PhaseStatusTimestamp ¶
type PhaseStatusTimestamp struct { Status PhaseStatus `json:"status"` Timestamp time.Time `json:"timestamp"` }
type PlanFile ¶
type PlanFile struct { ResourceChanges []ResourceChange `json:"resource_changes"` OutputChanges map[string]Change `json:"output_changes"` }
PlanFile represents the schema of a plan file
type PlanFileOptions ¶
type PlanFileOptions struct {
Format PlanFormat `schema:"format,required"`
}
PlanFileOptions are options for the plan file API
type PlanFormat ¶
type PlanFormat string
type Report ¶ added in v0.0.51
type Report struct { Additions int `json:"additions"` Changes int `json:"changes"` Destructions int `json:"destructions"` }
Report reports a summary of additions, changes, and deletions of resources in a plan or an apply.
func ParseApplyOutput ¶
func (Report) HasChanges ¶ added in v0.0.51
type Reporter ¶
type Reporter struct { logr.Logger pubsub.Subscriber VCSProviderService ConfigurationVersionService WorkspaceService internal.HostnameService }
Reporter reports back to VCS providers the current status of VCS-triggered runs.
type ReporterOptions ¶
type ReporterOptions struct { ConfigurationVersionService configversion.Service WorkspaceService workspace.Service VCSProviderService VCSProviderService logr.Logger }
type ResourceChange ¶
type ResourceChange struct {
Change Change
}
ResourceChange represents a proposed change to a resource in a plan file
type Run ¶
type Run struct { ID string `jsonapi:"primary,runs"` CreatedAt time.Time `jsonapi:"attribute" json:"created_at"` IsDestroy bool `jsonapi:"attribute" json:"is_destroy"` ForceCancelAvailableAt *time.Time `jsonapi:"attribute" json:"force_cancel_available_at"` Message string `jsonapi:"attribute" json:"message"` Organization string `jsonapi:"attribute" json:"organization"` Refresh bool `jsonapi:"attribute" json:"refresh"` RefreshOnly bool `jsonapi:"attribute" json:"refresh_only"` ReplaceAddrs []string `jsonapi:"attribute" json:"replace_addrs"` PositionInQueue int `jsonapi:"attribute" json:"position_in_queue"` TargetAddrs []string `jsonapi:"attribute" json:"target_addrs"` TerraformVersion string `jsonapi:"attribute" json:"terraform_version"` AllowEmptyApply bool `jsonapi:"attribute" json:"allow_empty_apply"` AutoApply bool `jsonapi:"attribute" json:"auto_apply"` PlanOnly bool `jsonapi:"attribute" json:"plan_only"` Source Source `jsonapi:"attribute" json:"source"` Status internal.RunStatus `jsonapi:"attribute" json:"status"` StatusTimestamps []StatusTimestamp `jsonapi:"attribute" json:"status_timestamps"` WorkspaceID string `jsonapi:"attribute" json:"workspace_id"` ConfigurationVersionID string `jsonapi:"attribute" json:"configuration_version_id"` ExecutionMode workspace.ExecutionMode `jsonapi:"attribute" json:"execution_mode"` Variables []Variable `jsonapi:"attribute" json:"variables"` Plan Phase `jsonapi:"attribute" json:"plan"` Apply Phase `jsonapi:"attribute" json:"apply"` Latest bool `jsonapi:"attribute" json:"latest"` // is latest run for workspace // IngressAttributes is non-nil if run was triggered by a VCS event. IngressAttributes *configversion.IngressAttributes `jsonapi:"attribute" json:"ingress_attributes"` // Username of user who created the run. This is nil if the run was // instead triggered by a VCS event. CreatedBy *string // OTF doesn't support cost estimation but some go-tfe API tests expect // a run to enter the RunCostEstimated state, and this boolean // determines whether to enter that state upon finishing a plan. CostEstimationEnabled bool }
Run is a terraform run.
func (*Run) CanAccessOrganization ¶
func (*Run) CanAccessWorkspace ¶
func (*Run) Cancel ¶
Cancel run. Returns a boolean indicating whether a cancel request should be enqueued (for an agent to kill an in progress process)
func (*Run) Cancelable ¶
Cancelable determines whether run can be cancelled.
func (*Run) Confirmable ¶
Confirmable determines whether run can be confirmed.
func (*Run) Discardable ¶
Discardable determines whether run can be discarded.
func (*Run) Done ¶
Done determines whether run has reached an end state, e.g. applied, discarded, etc.
func (*Run) EnqueueApply ¶
func (*Run) EnqueuePlan ¶
EnqueuePlan enqueues a plan for the run. It also sets the run as the latest run for its workspace (speculative runs are ignored).
func (*Run) Finish ¶
func (r *Run) Finish(phase internal.PhaseType, opts PhaseFinishOptions) error
Finish updates the run to reflect its plan or apply phase having finished.
func (*Run) ForceCancel ¶
ForceCancel force cancels a run. A cool-off period of 10 seconds must have elapsed following a cancelation request before a run can be force canceled.
func (*Run) HasChanges ¶
func (*Run) IsAPISource ¶ added in v0.1.8
func (*Run) IsCLISource ¶ added in v0.1.8
func (*Run) IsGithubSource ¶ added in v0.1.8
func (*Run) IsGitlabSource ¶ added in v0.1.8
func (*Run) IsUISource ¶ added in v0.1.8
type RunService ¶
type RunService = Service
Alias services so they don't conflict when nested together in struct
type Service ¶
type Service interface { CreateRun(ctx context.Context, workspaceID string, opts CreateOptions) (*Run, error) GetRun(ctx context.Context, id string) (*Run, error) ListRuns(ctx context.Context, opts ListOptions) (*resource.Page[*Run], error) EnqueuePlan(ctx context.Context, runID string) (*Run, error) // StartPhase starts a run phase. StartPhase(ctx context.Context, runID string, phase internal.PhaseType, _ PhaseStartOptions) (*Run, error) // FinishPhase finishes a phase. Creates a report of changes before updating the status of // the run. FinishPhase(ctx context.Context, runID string, phase internal.PhaseType, opts PhaseFinishOptions) (*Run, error) // GetPlanFile returns the plan file for the run. GetPlanFile(ctx context.Context, runID string, format PlanFormat) ([]byte, error) // UploadPlanFile persists a run's plan file. The plan format should be either // be binary or json. UploadPlanFile(ctx context.Context, runID string, plan []byte, format PlanFormat) error // Watch provides access to a stream of run events. The WatchOptions filters // events. Context must be cancelled to close stream. // // TODO(@leg100): it would be clearer to the caller if the stream is closed by // returning a stream object with a Close() method. The calling code would // call Watch(), and then defer a Close(), which is more readable IMO. Watch(ctx context.Context, opts WatchOptions) (<-chan pubsub.Event, error) // Cancel a run. If a run is in progress then a cancelation signal will be // sent out. Cancel(ctx context.Context, runID string) (*Run, error) // Apply enqueues an Apply for the run. Apply(ctx context.Context, runID string) error // Delete a run. Delete(ctx context.Context, runID string) error // DiscardRun discards a run. Run must be in the planned state. DiscardRun(ctx context.Context, runID string) error // ForceCancelRun forcefully cancels a run. ForceCancelRun(ctx context.Context, runID string) error internal.Authorizer // run authorizer // contains filtered or unexported methods }
type Spawner ¶
type Spawner struct { logr.Logger ConfigurationVersionService WorkspaceService VCSProviderService RunService }
Spawner spawns new runs in response to vcs events
type StatusTimestamp ¶ added in v0.1.8
type VCSProviderService ¶
type VCSProviderService vcsprovider.Service
type WatchOptions ¶
type WatchOptions struct { Organization *string `schema:"organization_name,omitempty"` // filter by organization name WorkspaceID *string `schema:"workspace_id,omitempty"` // filter by workspace ID; mutually exclusive with organization filter }
WatchOptions filters events returned by the Watch endpoint.