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

Commit413d1c8

Browse files
committed
fix(provisioner/terraform/tfparse): allow empty values in coder_workspace_tag defaults
1 parentf518669 commit413d1c8

File tree

4 files changed

+85
-20
lines changed

4 files changed

+85
-20
lines changed

‎coderd/templateversions_test.go‎

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -429,9 +429,8 @@ func TestPostTemplateVersionsByOrganization(t *testing.T) {
429429
}
430430
}`,
431431
},
432-
reqTags:map[string]string{"a":"b"},
433-
// wantTags: map[string]string{"owner": "", "scope": "organization", "a": "b"},
434-
expectError:`provisioner tag "a" evaluated to an empty value`,
432+
reqTags:map[string]string{"a":"b"},
433+
wantTags:map[string]string{"owner":"","scope":"organization","a":"b"},
435434
},
436435
{
437436
name:"main.tf with disallowed workspace tag value",
@@ -568,6 +567,42 @@ func TestPostTemplateVersionsByOrganization(t *testing.T) {
568567
},
569568
wantTags:map[string]string{"owner":"","scope":"organization"},
570569
},
570+
{
571+
name:"main.tf with tags from parameter with default value from variable no default",
572+
files:map[string]string{
573+
`main.tf`:`
574+
variable "provisioner" {
575+
type = string
576+
}
577+
variable "default_provisioner" {
578+
type = string
579+
default = "" # intentionally blank, set on template creation
580+
}
581+
data "coder_parameter" "provisioner" {
582+
name = "provisioner"
583+
mutable = false
584+
default = var.default_provisioner
585+
dynamic "option" {
586+
for_each = toset(split(",", var.provisioner))
587+
content {
588+
name = option.value
589+
value = option.value
590+
}
591+
}
592+
}
593+
data "coder_workspace_tags" "tags" {
594+
tags = {
595+
"provisioner" : data.coder_parameter.provisioner.value
596+
}
597+
}`,
598+
},
599+
reqTags:map[string]string{
600+
"provisioner":"alpha",
601+
},
602+
wantTags:map[string]string{
603+
"provisioner":"alpha","owner":"","scope":"organization",
604+
},
605+
},
571606
} {
572607
tt:=tt
573608
t.Run(tt.name,func(t*testing.T) {

‎enterprise/coderd/workspaces_test.go‎

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1488,8 +1488,11 @@ func TestWorkspaceTagsTerraform(t *testing.T) {
14881488
createTemplateVersionRequestTagsmap[string]string
14891489
// the coder_workspace_tags bit of main.tf.
14901490
// you can add more stuff here if you need
1491-
tfWorkspaceTagsstring
1492-
skipCreateWorkspacebool
1491+
tfWorkspaceTagsstring
1492+
templateImportUserVariableValues []codersdk.VariableValue
1493+
// if we need to set parameters on workspace build
1494+
workspaceBuildParameters []codersdk.WorkspaceBuildParameter
1495+
skipCreateWorkspacebool
14931496
}{
14941497
{
14951498
name:"no tags",
@@ -1589,6 +1592,38 @@ func TestWorkspaceTagsTerraform(t *testing.T) {
15891592
// matching tag foo=bar.
15901593
skipCreateWorkspace:true,
15911594
},
1595+
{
1596+
name:"overrides with dynamic option from var",
1597+
provisionerTags:map[string]string{"foo":"bar"},
1598+
createTemplateVersionRequestTags:map[string]string{"foo":"bar"},
1599+
templateImportUserVariableValues: []codersdk.VariableValue{{Name:"default_foo",Value:"baz"}, {Name:"foo",Value:"bar,baz"}},
1600+
workspaceBuildParameters: []codersdk.WorkspaceBuildParameter{{Name:"foo",Value:"bar"}},
1601+
tfWorkspaceTags:`
1602+
variable "default_foo" {
1603+
type = string
1604+
}
1605+
variable "foo" {
1606+
type = string
1607+
}
1608+
data "coder_parameter" "foo" {
1609+
name = "foo"
1610+
type = "string"
1611+
default = var.default_foo
1612+
mutable = false
1613+
dynamic "option" {
1614+
for_each = toset(split(",", var.foo))
1615+
content {
1616+
name = option.value
1617+
value = option.value
1618+
}
1619+
}
1620+
}
1621+
data "coder_workspace_tags" "tags" {
1622+
tags = {
1623+
"foo" = data.coder_parameter.foo.value
1624+
}
1625+
}`,
1626+
},
15921627
} {
15931628
tc:=tc
15941629
t.Run(tc.name,func(t*testing.T) {
@@ -1617,11 +1652,12 @@ func TestWorkspaceTagsTerraform(t *testing.T) {
16171652
fi,err:=templateAdmin.Upload(ctx,"application/x-tar",bytes.NewReader(tarBytes))
16181653
require.NoError(t,err,"failed to upload file")
16191654
tv,err:=templateAdmin.CreateTemplateVersion(ctx,owner.OrganizationID, codersdk.CreateTemplateVersionRequest{
1620-
Name:testutil.GetRandomName(t),
1621-
FileID:fi.ID,
1622-
StorageMethod:codersdk.ProvisionerStorageMethodFile,
1623-
Provisioner:codersdk.ProvisionerTypeTerraform,
1624-
ProvisionerTags:tc.createTemplateVersionRequestTags,
1655+
Name:testutil.GetRandomName(t),
1656+
FileID:fi.ID,
1657+
StorageMethod:codersdk.ProvisionerStorageMethodFile,
1658+
Provisioner:codersdk.ProvisionerTypeTerraform,
1659+
ProvisionerTags:tc.createTemplateVersionRequestTags,
1660+
UserVariableValues:tc.templateImportUserVariableValues,
16251661
})
16261662
require.NoError(t,err,"failed to create template version")
16271663
coderdtest.AwaitTemplateVersionJobCompleted(t,templateAdmin,tv.ID)
@@ -1630,8 +1666,9 @@ func TestWorkspaceTagsTerraform(t *testing.T) {
16301666
if!tc.skipCreateWorkspace {
16311667
// Creating a workspace as a non-privileged user must succeed
16321668
ws,err:=member.CreateUserWorkspace(ctx,memberUser.Username, codersdk.CreateWorkspaceRequest{
1633-
TemplateID:tpl.ID,
1634-
Name:coderdtest.RandomUsername(t),
1669+
TemplateID:tpl.ID,
1670+
Name:coderdtest.RandomUsername(t),
1671+
RichParameterValues:tc.workspaceBuildParameters,
16351672
})
16361673
require.NoError(t,err,"failed to create workspace")
16371674
coderdtest.AwaitWorkspaceBuildJobCompleted(t,member,ws.LatestBuild.ID)

‎provisioner/terraform/tfparse/tfparse.go‎

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -239,13 +239,6 @@ func (p *Parser) WorkspaceTagDefaults(ctx context.Context) (map[string]string, e
239239
returnnil,xerrors.Errorf("eval provisioner tags: %w",err)
240240
}
241241

242-
// Ensure that none of the tag values are empty after evaluation.
243-
fork,v:=rangeevalTags {
244-
iflen(strings.TrimSpace(v))>0 {
245-
continue
246-
}
247-
returnnil,xerrors.Errorf("provisioner tag %q evaluated to an empty value, please set a default value",k)
248-
}
249242
returnevalTags,nil
250243
}
251244

‎provisioner/terraform/tfparse/tfparse_test.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
268268
}
269269
}`,
270270
},
271-
expectError:`provisioner tag "az" evaluated to an empty value, please set a default value`,
271+
expectTags:map[string]string{"cluster":"developers","az":"","platform":"kubernetes","region":"us"},
272272
},
273273
{
274274
name:"main.tf with missing parameter default value outside workspace tags",

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp