[cloud] report run tasks by name instead of assuming pre_apply

This commit is contained in:
Brandon Croft 2021-12-15 14:43:02 -07:00 committed by Sebastian Rivera
parent 6b5da4d43c
commit 791c36c504
1 changed files with 17 additions and 5 deletions

View File

@ -324,7 +324,9 @@ in order to capture the filesystem context the remote workspace expects:
} }
// Retrieve the run to get its current status. // Retrieve the run to get its current status.
r, err = b.client.Runs.Read(stopCtx, r.ID) r, err = b.client.Runs.ReadWithOptions(stopCtx, r.ID, &tfe.RunReadOptions{
Include: "task_stages",
})
if err != nil { if err != nil {
return r, generalError("Failed to retrieve run", err) return r, generalError("Failed to retrieve run", err)
} }
@ -354,13 +356,14 @@ in order to capture the filesystem context the remote workspace expects:
// Await pre-apply run tasks // Await pre-apply run tasks
if len(r.TaskStage) > 0 { if len(r.TaskStage) > 0 {
context := NewIntegrationContext(stopCtx, cancelCtx, b, op, r) context := NewIntegrationContext(stopCtx, cancelCtx, b, op, r)
// TODO: this only works while there is exactly 1 task stage
err = b.runTasks(context, context.BeginOutput("Run Tasks (pre-apply)"), r.TaskStage[0].ID)
if stageID := getTaskStageIDByName(r.TaskStage, "pre_apply"); stageID != nil {
err = b.runTasks(context, context.BeginOutput("Run Tasks (pre-apply)"), *stageID)
if err != nil { if err != nil {
return r, err return r, err
} }
} }
}
return r, nil return r, nil
} }
@ -370,6 +373,15 @@ func String(v string) *string {
return &v return &v
} }
func getTaskStageIDByName(stages []*tfe.TaskStage, name string) *string {
for _, stage := range stages {
if stage.Stage == name {
return &stage.ID
}
}
return nil
}
const planDefaultHeader = ` const planDefaultHeader = `
[reset][yellow]Running plan in Terraform Cloud. Output will stream here. Pressing Ctrl-C [reset][yellow]Running plan in Terraform Cloud. Output will stream here. Pressing Ctrl-C
will stop streaming the logs, but will not stop the plan running remotely.[reset] will stop streaming the logs, but will not stop the plan running remotely.[reset]