@@ -10,6 +10,7 @@ import (
10
10
"github.com/coder/coder/v2/coderd/rbac"
11
11
"github.com/coder/coder/v2/codersdk"
12
12
"github.com/coder/coder/v2/provisioner/echo"
13
+ "github.com/coder/coder/v2/provisioner/terraform"
13
14
"github.com/coder/coder/v2/provisionersdk/proto"
14
15
"github.com/coder/coder/v2/testutil"
15
16
"github.com/coder/websocket"
@@ -132,3 +133,51 @@ func TestDynamicParametersOwnerSSHPublicKey(t *testing.T) {
132
133
require .True (t , preview .Parameters [0 ].Value .Valid ())
133
134
require .Equal (t , sshKey .PublicKey , preview .Parameters [0 ].Value .Value .AsString ())
134
135
}
136
+
137
+ func TestDynamicParametersWithTerraformModules (t * testing.T ) {
138
+ t .Parallel ()
139
+
140
+ cfg := coderdtest .DeploymentValues (t )
141
+ cfg .Experiments = []string {string (codersdk .ExperimentDynamicParameters )}
142
+ ownerClient := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerDaemon : true , DeploymentValues : cfg })
143
+ owner := coderdtest .CreateFirstUser (t , ownerClient )
144
+ templateAdmin , templateAdminUser := coderdtest .CreateAnotherUser (t , ownerClient , owner .OrganizationID , rbac .RoleTemplateAdmin ())
145
+
146
+ dynamicParametersTerraformSource , err := os .ReadFile ("testdata/parameters/modules/main.tf" )
147
+ require .NoError (t , err )
148
+ modulesArchive , err := terraform .GetModulesArchive (os .DirFS ("testdata/parameters/modules" ))
149
+ require .NoError (t , err )
150
+
151
+ files := echo .WithExtraFiles (map [string ][]byte {
152
+ "main.tf" : dynamicParametersTerraformSource ,
153
+ })
154
+ files .ProvisionPlan = []* proto.Response {{
155
+ Type : & proto.Response_Plan {
156
+ Plan : & proto.PlanComplete {
157
+ Plan : []byte ("{}" ),
158
+ ModuleFiles : modulesArchive ,
159
+ },
160
+ },
161
+ }}
162
+
163
+ version := coderdtest .CreateTemplateVersion (t , templateAdmin , owner .OrganizationID , files )
164
+ coderdtest .AwaitTemplateVersionJobCompleted (t , templateAdmin , version .ID )
165
+ _ = coderdtest .CreateTemplate (t , templateAdmin , owner .OrganizationID , version .ID )
166
+
167
+ ctx := testutil .Context (t , testutil .WaitShort )
168
+ stream , err := templateAdmin .TemplateVersionDynamicParameters (ctx , templateAdminUser .ID , version .ID )
169
+ require .NoError (t , err )
170
+ defer stream .Close (websocket .StatusGoingAway )
171
+
172
+ previews := stream .Chan ()
173
+
174
+ // Should see the output of the module represented
175
+ preview := testutil .RequireReceive (ctx , t , previews )
176
+ require .Equal (t , - 1 , preview .ID )
177
+ require .Empty (t , preview .Diagnostics )
178
+
179
+ require .Len (t , preview .Parameters , 1 )
180
+ require .Equal (t , "jetbrains_ide" , preview .Parameters [0 ].Name )
181
+ require .True (t , preview .Parameters [0 ].Value .Valid ())
182
+ require .Equal (t , "CL" , preview .Parameters [0 ].Value .AsString ())
183
+ }
0 commit comments