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

Commit7dc3ad9

Browse files
authored
fix(provisioner/terraform/tfparse): evaluate coder_parameter defaults with variables (#15800)
- adds support for dynamic default values in coder_parameter data source
1 parent33d67b1 commit7dc3ad9

File tree

2 files changed

+84
-3
lines changed

2 files changed

+84
-3
lines changed

‎provisioner/terraform/tfparse/tfparse.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ func (p *Parser) WorkspaceTagDefaults(ctx context.Context) (map[string]string, e
172172
iferr!=nil {
173173
returnnil,xerrors.Errorf("load variable defaults: %w",err)
174174
}
175-
paramsDefaults,err:=p.CoderParameterDefaults(ctx)
175+
paramsDefaults,err:=p.CoderParameterDefaults(ctx,varsDefaults)
176176
iferr!=nil {
177177
returnnil,xerrors.Errorf("load parameter defaults: %w",err)
178178
}
@@ -268,7 +268,7 @@ func (p *Parser) VariableDefaults(ctx context.Context) (map[string]string, error
268268

269269
// CoderParameterDefaults returns the default values of all coder_parameter data sources
270270
// in the parsed module.
271-
func (p*Parser)CoderParameterDefaults(ctx context.Context) (map[string]string,error) {
271+
func (p*Parser)CoderParameterDefaults(ctx context.Context,varsDefaultsmap[string]string) (map[string]string,error) {
272272
defaultsM:=make(map[string]string)
273273
var (
274274
skipped []string
@@ -316,14 +316,28 @@ func (p *Parser) CoderParameterDefaults(ctx context.Context) (map[string]string,
316316
}
317317

318318
if_,ok:=resContent.Attributes["default"];!ok {
319+
p.logger.Warn(ctx,"coder_parameter data source does not have a default value",slog.F("name",dataResource.Name))
319320
defaultsM[dataResource.Name]=""
320321
}else {
321322
expr:=resContent.Attributes["default"].Expr
322323
value,err:=previewFileContent(expr.Range())
323324
iferr!=nil {
324325
returnnil,xerrors.Errorf("can't preview the resource file: %v",err)
325326
}
326-
defaultsM[dataResource.Name]=strings.Trim(value,`"`)
327+
// Issue #15795: the "default" value could also be an expression we need
328+
// to evaluate.
329+
// TODO: should we support coder_parameter default values that reference other coder_parameter data sources?
330+
evalCtx:=buildEvalContext(varsDefaults,nil)
331+
val,diags:=expr.Value(evalCtx)
332+
ifdiags.HasErrors() {
333+
returnnil,xerrors.Errorf("failed to evaluate coder_parameter %q default value %q: %s",dataResource.Name,value,diags.Error())
334+
}
335+
// Do not use "val.AsString()" as it can panic
336+
strVal,err:=ctyValueString(val)
337+
iferr!=nil {
338+
returnnil,xerrors.Errorf("failed to marshal coder_parameter %q default value %q as string: %s",dataResource.Name,value,err)
339+
}
340+
defaultsM[dataResource.Name]=strings.Trim(strVal,`"`)
327341
}
328342
}
329343
}

‎provisioner/terraform/tfparse/tfparse_test.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,73 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
114114
expectTags:map[string]string{"platform":"kubernetes","cluster":"developers","region":"us","az":"a"},
115115
expectError:"",
116116
},
117+
{
118+
name:"main.tf with parameter that has default value from dynamic value",
119+
files:map[string]string{
120+
"main.tf":`
121+
provider "foo" {}
122+
resource "foo_bar" "baz" {}
123+
variable "region" {
124+
type = string
125+
default = "us"
126+
}
127+
variable "az" {
128+
type = string
129+
default = "${""}${"a"}"
130+
}
131+
data "base" "ours" {
132+
all = true
133+
}
134+
data "coder_parameter" "az" {
135+
name = "az"
136+
type = "string"
137+
default = var.az
138+
}
139+
data "coder_workspace_tags" "tags" {
140+
tags = {
141+
"platform" = "kubernetes",
142+
"cluster" = "${"devel"}${"opers"}"
143+
"region" = var.region
144+
"az" = data.coder_parameter.az.value
145+
}
146+
}`,
147+
},
148+
expectTags:map[string]string{"platform":"kubernetes","cluster":"developers","region":"us","az":"a"},
149+
expectError:"",
150+
},
151+
{
152+
name:"main.tf with parameter that has default value from another parameter",
153+
files:map[string]string{
154+
"main.tf":`
155+
provider "foo" {}
156+
resource "foo_bar" "baz" {}
157+
variable "region" {
158+
type = string
159+
default = "us"
160+
}
161+
data "base" "ours" {
162+
all = true
163+
}
164+
data "coder_parameter" "az" {
165+
type = string
166+
default = "${""}${"a"}"
167+
}
168+
data "coder_parameter" "az2" {
169+
name = "az"
170+
type = "string"
171+
default = data.coder_parameter.az.value
172+
}
173+
data "coder_workspace_tags" "tags" {
174+
tags = {
175+
"platform" = "kubernetes",
176+
"cluster" = "${"devel"}${"opers"}"
177+
"region" = var.region
178+
"az" = data.coder_parameter.az2.value
179+
}
180+
}`,
181+
},
182+
expectError:"Unknown variable; There is no variable named\"data\".",
183+
},
117184
{
118185
name:"main.tf with multiple valid workspace tags",
119186
files:map[string]string{

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp