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

Commit789c4be

Browse files
authored
chore: add dynamic parameter error if missing metadata from provisioner (#17809)
1 parentf3bcac2 commit789c4be

14 files changed

+163
-25
lines changed

‎coderd/coderd.go‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1774,6 +1774,7 @@ func (api *API) CreateInMemoryTaggedProvisionerDaemon(dialCtx context.Context, n
17741774
logger:=api.Logger.Named(fmt.Sprintf("inmem-provisionerd-%s",name))
17751775
srv,err:=provisionerdserver.NewServer(
17761776
api.ctx,// use the same ctx as the API
1777+
daemon.APIVersion,
17771778
api.AccessURL,
17781779
daemon.ID,
17791780
defaultOrg.ID,

‎coderd/database/dbgen/dbgen.go‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"github.com/coder/coder/v2/coderd/rbac"
3030
"github.com/coder/coder/v2/codersdk"
3131
"github.com/coder/coder/v2/cryptorand"
32+
"github.com/coder/coder/v2/provisionerd/proto"
3233
"github.com/coder/coder/v2/testutil"
3334
)
3435

@@ -1000,10 +1001,11 @@ func TemplateVersionTerraformValues(t testing.TB, db database.Store, orig databa
10001001
t.Helper()
10011002

10021003
params:= database.InsertTemplateVersionTerraformValuesByJobIDParams{
1003-
JobID:takeFirst(orig.JobID,uuid.New()),
1004-
CachedPlan:takeFirstSlice(orig.CachedPlan, []byte("{}")),
1005-
CachedModuleFiles:orig.CachedModuleFiles,
1006-
UpdatedAt:takeFirst(orig.UpdatedAt,dbtime.Now()),
1004+
JobID:takeFirst(orig.JobID,uuid.New()),
1005+
CachedPlan:takeFirstSlice(orig.CachedPlan, []byte("{}")),
1006+
CachedModuleFiles:orig.CachedModuleFiles,
1007+
UpdatedAt:takeFirst(orig.UpdatedAt,dbtime.Now()),
1008+
ProvisionerdVersion:takeFirst(orig.ProvisionerdVersion,proto.CurrentVersion.String()),
10071009
}
10081010

10091011
err:=db.InsertTemplateVersionTerraformValuesByJobID(genCtx,params)

‎coderd/database/dbmem/dbmem.go‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9343,10 +9343,11 @@ func (q *FakeQuerier) InsertTemplateVersionTerraformValuesByJobID(_ context.Cont
93439343

93449344
// Insert the new row
93459345
row:= database.TemplateVersionTerraformValue{
9346-
TemplateVersionID:templateVersion.ID,
9347-
CachedPlan:arg.CachedPlan,
9348-
CachedModuleFiles:arg.CachedModuleFiles,
9349-
UpdatedAt:arg.UpdatedAt,
9346+
TemplateVersionID:templateVersion.ID,
9347+
UpdatedAt:arg.UpdatedAt,
9348+
CachedPlan:arg.CachedPlan,
9349+
CachedModuleFiles:arg.CachedModuleFiles,
9350+
ProvisionerdVersion:arg.ProvisionerdVersion,
93509351
}
93519352
q.templateVersionTerraformValues=append(q.templateVersionTerraformValues,row)
93529353
returnnil

‎coderd/database/dump.sql‎

Lines changed: 4 additions & 1 deletion
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTERTABLE template_version_terraform_values DROP COLUMN provisionerd_version;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
ALTERTABLE template_version_terraform_values ADD COLUMN IF NOT EXISTS provisionerd_versionTEXTNOT NULL DEFAULT'';
2+
3+
COMMENT ON COLUMN template_version_terraform_values.provisionerd_version IS
4+
'What version of the provisioning engine was used to generate the cached plan and module files.';

‎coderd/database/models.go‎

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/queries.sql.go‎

Lines changed: 12 additions & 7 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/queries/templateversionterraformvalues.sql‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@ INSERT INTO
1212
template_version_id,
1313
cached_plan,
1414
cached_module_files,
15-
updated_at
15+
updated_at,
16+
provisionerd_version
1617
)
1718
VALUES
1819
(
1920
(select idfrom template_versionswhere job_id= @job_id),
2021
@cached_plan,
2122
@cached_module_files,
22-
@updated_at
23+
@updated_at,
24+
@provisionerd_version
2325
);

‎coderd/parameters.go‎

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ import (
88
"time"
99

1010
"github.com/google/uuid"
11+
"github.com/hashicorp/hcl/v2"
1112
"golang.org/x/sync/errgroup"
1213
"golang.org/x/xerrors"
1314

15+
"github.com/coder/coder/v2/apiversion"
1416
"github.com/coder/coder/v2/coderd/database"
1517
"github.com/coder/coder/v2/coderd/database/dbauthz"
1618
"github.com/coder/coder/v2/coderd/files"
@@ -107,6 +109,9 @@ func (api *API) templateVersionDynamicParameters(rw http.ResponseWriter, r *http
107109
return
108110
}
109111

112+
// If the err is sql.ErrNoRows, an empty terraform values struct is correct.
113+
staticDiagnostics:=parameterProvisionerVersionDiagnostic(tf)
114+
110115
owner,err:=api.getWorkspaceOwnerData(ctx,user,templateVersion.OrganizationID)
111116
iferr!=nil {
112117
httpapi.Write(ctx,rw,http.StatusInternalServerError, codersdk.Response{
@@ -141,7 +146,7 @@ func (api *API) templateVersionDynamicParameters(rw http.ResponseWriter, r *http
141146
result,diagnostics:=preview.Preview(ctx,input,templateFS)
142147
response:= codersdk.DynamicParametersResponse{
143148
ID:-1,
144-
Diagnostics:previewtypes.Diagnostics(diagnostics),
149+
Diagnostics:previewtypes.Diagnostics(diagnostics.Extend(staticDiagnostics)),
145150
}
146151
ifresult!=nil {
147152
response.Parameters=result.Parameters
@@ -169,7 +174,7 @@ func (api *API) templateVersionDynamicParameters(rw http.ResponseWriter, r *http
169174
result,diagnostics:=preview.Preview(ctx,input,templateFS)
170175
response:= codersdk.DynamicParametersResponse{
171176
ID:update.ID,
172-
Diagnostics:previewtypes.Diagnostics(diagnostics),
177+
Diagnostics:previewtypes.Diagnostics(diagnostics.Extend(staticDiagnostics)),
173178
}
174179
ifresult!=nil {
175180
response.Parameters=result.Parameters
@@ -262,3 +267,31 @@ func (api *API) getWorkspaceOwnerData(
262267
Groups:groupNames,
263268
},nil
264269
}
270+
271+
// parameterProvisionerVersionDiagnostic checks the version of the provisioner
272+
// used to create the template version. If the version is less than 1.5, it
273+
// returns a warning diagnostic. Only versions 1.5+ return the module & plan data
274+
// required.
275+
funcparameterProvisionerVersionDiagnostic(tf database.TemplateVersionTerraformValue) hcl.Diagnostics {
276+
missingMetadata:= hcl.Diagnostic{
277+
Severity:hcl.DiagError,
278+
Summary:"This template version is missing required metadata to support dynamic parameters. Go back to the classic creation flow.",
279+
Detail:"To restore full functionality, please re-import the terraform as a new template version.",
280+
}
281+
282+
iftf.ProvisionerdVersion=="" {
283+
return hcl.Diagnostics{&missingMetadata}
284+
}
285+
286+
major,minor,err:=apiversion.Parse(tf.ProvisionerdVersion)
287+
iferr!=nil||tf.ProvisionerdVersion=="" {
288+
return hcl.Diagnostics{&missingMetadata}
289+
}elseifmajor<1|| (major==1&&minor<5) {
290+
missingMetadata.Detail="This template version does not support dynamic parameters. "+
291+
"Some options may be missing or incorrect. "+
292+
"Please contact an administrator to update the provisioner and re-import the template version."
293+
return hcl.Diagnostics{&missingMetadata}
294+
}
295+
296+
returnnil
297+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp