| // Copyright IBM Corp. 2014, 2026 | |
| // SPDX-License-Identifier: BUSL-1.1 | |
| package cloud | |
| import ( | |
| "context" | |
| tfe "github.com/hashicorp/go-tfe" | |
| "github.com/hashicorp/terraform/internal/backend/backendrun" | |
| ) | |
| type OperationResult interface { | |
| GetID() string | |
| Read(ctx context.Context) (OperationResult, error) | |
| Cancel(ctx context.Context, op *backendrun.Operation) error | |
| IsCanceled() bool | |
| IsErrored() bool | |
| HasResult() bool | |
| HasChanges() bool | |
| } | |
| type RunResult struct { | |
| run *tfe.Run | |
| backend *Cloud | |
| } | |
| func (r *RunResult) GetID() string { return r.run.ID } | |
| func (r *RunResult) HasChanges() bool { return r.run.HasChanges } | |
| func (r *RunResult) IsCanceled() bool { return r.run.Status == tfe.RunCanceled } | |
| func (r *RunResult) IsErrored() bool { return r.run.Status == tfe.RunErrored } | |
| func (r *RunResult) HasResult() bool { return r.run != nil } | |
| func (r *RunResult) Read(ctx context.Context) (OperationResult, error) { | |
| run, err := r.backend.client.Runs.Read(ctx, r.run.ID) | |
| if err != nil { | |
| return nil, err | |
| } | |
| return &RunResult{run: run, backend: r.backend}, nil | |
| } | |
| func (r *RunResult) Cancel(ctx context.Context, op *backendrun.Operation) error { | |
| return r.backend.cancel(ctx, op, r.run) | |
| } | |
| type QueryRunResult struct { | |
| run *tfe.QueryRun | |
| backend *Cloud | |
| } | |
| func (qr *QueryRunResult) GetID() string { return qr.run.ID } | |
| func (qr *QueryRunResult) HasChanges() bool { return false } | |
| func (qr *QueryRunResult) IsCanceled() bool { return qr.run.Status == tfe.QueryRunCanceled } | |
| func (qr *QueryRunResult) IsErrored() bool { return qr.run.Status == tfe.QueryRunErrored } | |
| func (qr *QueryRunResult) HasResult() bool { return qr.run != nil } | |
| func (qr *QueryRunResult) Read(ctx context.Context) (OperationResult, error) { | |
| run, err := qr.backend.client.QueryRuns.Read(ctx, qr.run.ID) | |
| if err != nil { | |
| return nil, err | |
| } | |
| return &QueryRunResult{run: run, backend: qr.backend}, nil | |
| } | |
| func (qr *QueryRunResult) Cancel(ctx context.Context, op *backendrun.Operation) error { | |
| return qr.backend.cancelQueryRun(ctx, op, qr.run) | |
| } |