@@ -1488,8 +1488,11 @@ func TestWorkspaceTagsTerraform(t *testing.T) {
14881488createTemplateVersionRequestTags map [string ]string
14891489// the coder_workspace_tags bit of main.tf.
14901490// you can add more stuff here if you need
1491- tfWorkspaceTags string
1492- skipCreateWorkspace bool
1491+ tfWorkspaceTags string
1492+ templateImportUserVariableValues []codersdk.VariableValue
1493+ // if we need to set parameters on workspace build
1494+ workspaceBuildParameters []codersdk.WorkspaceBuildParameter
1495+ skipCreateWorkspace bool
14931496}{
14941497{
14951498name :"no tags" ,
@@ -1589,6 +1592,38 @@ func TestWorkspaceTagsTerraform(t *testing.T) {
15891592// matching tag foo=bar.
15901593skipCreateWorkspace :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} {
15931628tc := tc
15941629t .Run (tc .name ,func (t * testing.T ) {
@@ -1617,11 +1652,12 @@ func TestWorkspaceTagsTerraform(t *testing.T) {
16171652fi ,err := templateAdmin .Upload (ctx ,"application/x-tar" ,bytes .NewReader (tarBytes ))
16181653require .NoError (t ,err ,"failed to upload file" )
16191654tv ,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})
16261662require .NoError (t ,err ,"failed to create template version" )
16271663coderdtest .AwaitTemplateVersionJobCompleted (t ,templateAdmin ,tv .ID )
@@ -1630,8 +1666,9 @@ func TestWorkspaceTagsTerraform(t *testing.T) {
16301666if ! tc .skipCreateWorkspace {
16311667// Creating a workspace as a non-privileged user must succeed
16321668ws ,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})
16361673require .NoError (t ,err ,"failed to create workspace" )
16371674coderdtest .AwaitWorkspaceBuildJobCompleted (t ,member ,ws .LatestBuild .ID )