chore: persist template import terraform plan in postgres (#17012)

This commit is contained in:
ケイラ
2025-03-24 10:01:50 -06:00
committed by GitHub
parent 445a059da2
commit 5b3eda6719
26 changed files with 491 additions and 257 deletions
@@ -1270,6 +1270,8 @@ func (s *server) CompleteJob(ctx context.Context, completed *proto.CompletedJob)
return nil, xerrors.Errorf("template version ID is expected: %w", err)
}
now := s.timeNow()
for transition, resources := range map[database.WorkspaceTransition][]*sdkproto.Resource{
database.WorkspaceTransitionStart: jobType.TemplateImport.StartResources,
database.WorkspaceTransitionStop: jobType.TemplateImport.StopResources,
@@ -1354,7 +1356,7 @@ func (s *server) CompleteJob(ctx context.Context, completed *proto.CompletedJob)
}
}
err = InsertWorkspacePresetsAndParameters(ctx, s.Logger, s.Database, jobID, input.TemplateVersionID, jobType.TemplateImport.Presets, s.timeNow())
err = InsertWorkspacePresetsAndParameters(ctx, s.Logger, s.Database, jobID, input.TemplateVersionID, jobType.TemplateImport.Presets, now)
if err != nil {
return nil, xerrors.Errorf("insert workspace presets and parameters: %w", err)
}
@@ -1406,18 +1408,27 @@ func (s *server) CompleteJob(ctx context.Context, completed *proto.CompletedJob)
err = s.Database.UpdateTemplateVersionExternalAuthProvidersByJobID(ctx, database.UpdateTemplateVersionExternalAuthProvidersByJobIDParams{
JobID: jobID,
ExternalAuthProviders: json.RawMessage(externalAuthProvidersMessage),
UpdatedAt: s.timeNow(),
ExternalAuthProviders: externalAuthProvidersMessage,
UpdatedAt: now,
})
if err != nil {
return nil, xerrors.Errorf("update template version external auth providers: %w", err)
}
err = s.Database.InsertTemplateVersionTerraformValuesByJobID(ctx, database.InsertTemplateVersionTerraformValuesByJobIDParams{
JobID: jobID,
CachedPlan: jobType.TemplateImport.Plan,
UpdatedAt: now,
})
if err != nil {
return nil, xerrors.Errorf("insert template version terraform data: %w", err)
}
err = s.Database.UpdateProvisionerJobWithCompleteByID(ctx, database.UpdateProvisionerJobWithCompleteByIDParams{
ID: jobID,
UpdatedAt: s.timeNow(),
UpdatedAt: now,
CompletedAt: sql.NullTime{
Time: s.timeNow(),
Time: now,
Valid: true,
},
Error: completedError,
@@ -1427,6 +1438,7 @@ func (s *server) CompleteJob(ctx context.Context, completed *proto.CompletedJob)
return nil, xerrors.Errorf("update provisioner job: %w", err)
}
s.Logger.Debug(ctx, "marked import job as completed", slog.F("job_id", jobID))
case *proto.CompletedJob_WorkspaceBuild_:
var input WorkspaceProvisionJob
err = json.Unmarshal(job.Input, &input)
@@ -1060,6 +1060,7 @@ func TestCompleteJob(t *testing.T) {
ExternalAuthProviders: []*sdkproto.ExternalAuthProviderResource{{
Id: "github",
}},
Plan: []byte("{}"),
},
},
})
@@ -1115,6 +1116,7 @@ func TestCompleteJob(t *testing.T) {
}},
StopResources: []*sdkproto.Resource{},
ExternalAuthProviders: []*sdkproto.ExternalAuthProviderResource{{Id: "github"}},
Plan: []byte("{}"),
},
},
})
@@ -1523,6 +1525,7 @@ func TestCompleteJob(t *testing.T) {
Source: "github.com/example2/example",
},
},
Plan: []byte("{}"),
},
},
},