Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit46d1769

Browse files
committed
chore: dump provisioner logs on error
1 parentee9ac22 commit46d1769

File tree

2 files changed

+36
-19
lines changed

2 files changed

+36
-19
lines changed

‎internal/provider/template_data_source_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func TestAccTemplateDataSource(t *testing.T) {
2828
require.NoError(t,err)
2929
orgID:=firstUser.OrganizationIDs[0]
3030

31-
version,err:=newVersion(ctx,client,newVersionRequest{
31+
version,err,_:=newVersion(ctx,client,newVersionRequest{
3232
OrganizationID:orgID,
3333
Version:&TemplateVersion{
3434
Name:types.StringValue("main"),

‎internal/provider/template_resource.go

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -495,9 +495,9 @@ func (r *TemplateResource) Create(ctx context.Context, req resource.CreateReques
495495
ifidx>0 {
496496
newVersionRequest.TemplateID=&templateResp.ID
497497
}
498-
versionResp,err:=newVersion(ctx,client,newVersionRequest)
498+
versionResp,err,logs:=newVersion(ctx,client,newVersionRequest)
499499
iferr!=nil {
500-
resp.Diagnostics.AddError("Client Error",err.Error())
500+
resp.Diagnostics.AddError("Provisioner Error",formatLogs(err,logs))
501501
return
502502
}
503503
ifidx==0 {
@@ -701,13 +701,13 @@ func (r *TemplateResource) Update(ctx context.Context, req resource.UpdateReques
701701
foridx:=rangenewState.Versions {
702702
ifnewState.Versions[idx].ID.IsUnknown() {
703703
tflog.Info(ctx,"discovered a new or modified template version")
704-
uploadResp,err:=newVersion(ctx,client,newVersionRequest{
704+
uploadResp,err,logs:=newVersion(ctx,client,newVersionRequest{
705705
Version:&newState.Versions[idx],
706706
OrganizationID:orgID,
707707
TemplateID:&templateID,
708708
})
709709
iferr!=nil {
710-
resp.Diagnostics.AddError("Client Error",err.Error())
710+
resp.Diagnostics.AddError("Provisioner Error",formatLogs(err,logs))
711711
return
712712
}
713713
versionResp,err:=client.TemplateVersion(ctx,uploadResp.ID)
@@ -950,13 +950,14 @@ func uploadDirectory(ctx context.Context, client *codersdk.Client, logger slog.L
950950
return&resp,nil
951951
}
952952

953-
funcwaitForJob(ctx context.Context,client*codersdk.Client,version*codersdk.TemplateVersion)error {
953+
funcwaitForJob(ctx context.Context,client*codersdk.Client,version*codersdk.TemplateVersion)([]codersdk.ProvisionerJobLog,error) {
954954
constmaxRetries=3
955+
varjobLogs []codersdk.ProvisionerJobLog
955956
forretries:=0;retries<maxRetries;retries++ {
956957
logs,closer,err:=client.TemplateVersionLogsAfter(ctx,version.ID,0)
957958
defercloser.Close()
958959
iferr!=nil {
959-
returnfmt.Errorf("begin streaming logs: %w",err)
960+
returnjobLogs,fmt.Errorf("begin streaming logs: %w",err)
960961
}
961962
for {
962963
logs,ok:=<-logs
@@ -970,21 +971,24 @@ func waitForJob(ctx context.Context, client *codersdk.Client, version *codersdk.
970971
"level":logs.Level,
971972
"created_at":logs.CreatedAt,
972973
})
974+
iflogs.Output!="" {
975+
jobLogs=append(jobLogs,logs)
976+
}
973977
}
974978
latestResp,err:=client.TemplateVersion(ctx,version.ID)
975979
iferr!=nil {
976-
returnerr
980+
returnjobLogs,err
977981
}
978982
iflatestResp.Job.Status.Active() {
979983
tflog.Warn(ctx,fmt.Sprintf("provisioner job still active, continuing to wait...: %s",latestResp.Job.Status))
980984
continue
981985
}
982986
iflatestResp.Job.Status!=codersdk.ProvisionerJobSucceeded {
983-
returnfmt.Errorf("provisioner job did not succeed: %s (%s)",latestResp.Job.Status,latestResp.Job.Error)
987+
returnjobLogs,fmt.Errorf("provisioner job did not succeed: %s (%s)",latestResp.Job.Status,latestResp.Job.Error)
984988
}
985-
returnnil
989+
returnjobLogs,nil
986990
}
987-
returnfmt.Errorf("provisioner job did not complete after %d retries",maxRetries)
991+
returnjobLogs,fmt.Errorf("provisioner job did not complete after %d retries",maxRetries)
988992
}
989993

990994
typenewVersionRequeststruct {
@@ -993,22 +997,23 @@ type newVersionRequest struct {
993997
TemplateID*uuid.UUID
994998
}
995999

996-
funcnewVersion(ctx context.Context,client*codersdk.Client,reqnewVersionRequest) (*codersdk.TemplateVersion,error) {
1000+
funcnewVersion(ctx context.Context,client*codersdk.Client,reqnewVersionRequest) (*codersdk.TemplateVersion,error, []codersdk.ProvisionerJobLog) {
1001+
varlogs []codersdk.ProvisionerJobLog
9971002
directory:=req.Version.Directory.ValueString()
9981003
tflog.Info(ctx,"uploading directory")
9991004
uploadResp,err:=uploadDirectory(ctx,client,slog.Make(newTFLogSink(ctx)),directory)
10001005
iferr!=nil {
1001-
returnnil,fmt.Errorf("failed to upload directory: %s",err)
1006+
returnnil,fmt.Errorf("failed to upload directory: %s",err),logs
10021007
}
10031008
tflog.Info(ctx,"successfully uploaded directory")
10041009
tflog.Info(ctx,"discovering and parsing vars files")
10051010
varFiles,err:=codersdk.DiscoverVarsFiles(directory)
10061011
iferr!=nil {
1007-
returnnil,fmt.Errorf("failed to discover vars files: %s",err)
1012+
returnnil,fmt.Errorf("failed to discover vars files: %s",err),logs
10081013
}
10091014
vars,err:=codersdk.ParseUserVariableValues(varFiles,"", []string{})
10101015
iferr!=nil {
1011-
returnnil,fmt.Errorf("failed to parse user variable values: %s",err)
1016+
returnnil,fmt.Errorf("failed to parse user variable values: %s",err),logs
10121017
}
10131018
tflog.Info(ctx,"discovered and parsed vars files",map[string]any{
10141019
"vars":vars,
@@ -1033,15 +1038,15 @@ func newVersion(ctx context.Context, client *codersdk.Client, req newVersionRequ
10331038
tflog.Info(ctx,"creating template version")
10341039
versionResp,err:=client.CreateTemplateVersion(ctx,req.OrganizationID,tmplVerReq)
10351040
iferr!=nil {
1036-
returnnil,fmt.Errorf("failed to create template version: %s",err)
1041+
returnnil,fmt.Errorf("failed to create template version: %s",err),logs
10371042
}
10381043
tflog.Info(ctx,"waiting for template version import job.")
1039-
err=waitForJob(ctx,client,&versionResp)
1044+
logs,err=waitForJob(ctx,client,&versionResp)
10401045
iferr!=nil {
1041-
returnnil,fmt.Errorf("failed to wait for job: %s",err)
1046+
returnnil,fmt.Errorf("failed to wait for job: %s",err),logs
10421047
}
10431048
tflog.Info(ctx,"successfully created template version")
1044-
return&versionResp,nil
1049+
return&versionResp,nil,logs
10451050
}
10461051

10471052
funcmarkActive(ctx context.Context,client*codersdk.Client,templateID uuid.UUID,versionID uuid.UUID)error {
@@ -1309,3 +1314,15 @@ func (planVersions Versions) reconcileVersionIDs(lv LastVersionsByHash, configVe
13091314
}
13101315
}
13111316
}
1317+
1318+
funcformatLogs(errerror,logs []codersdk.ProvisionerJobLog)string {
1319+
varb strings.Builder
1320+
b.WriteString(err.Error()+"\n")
1321+
for_,log:=rangelogs {
1322+
if!log.CreatedAt.IsZero() {
1323+
b.WriteString(log.CreatedAt.Local().Format("2006-01-02 15:04:05.000Z07:00")+" ")
1324+
}
1325+
b.WriteString(log.Output+"\n")
1326+
}
1327+
returnb.String()
1328+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp