1
1
package cli
2
2
3
3
import (
4
- "context"
5
4
"fmt"
6
5
"io"
7
6
"time"
@@ -197,23 +196,7 @@ func prepWorkspaceBuild(cmd *cobra.Command, client *codersdk.Client, args prepWo
197
196
return nil , err
198
197
}
199
198
200
- legacyParameters , err := prepLegacyParameters (ctx , cmd , client , templateVersion , args )
201
- if err != nil {
202
- return nil , err
203
- }
204
-
205
- richParameters , err := prepRichParameters ()
206
- if err != nil {
207
- return nil , err
208
- }
209
-
210
- return & buildParameters {
211
- parameters : legacyParameters ,
212
- richParameters : richParameters ,
213
- }, nil
214
- }
215
-
216
- func prepLegacyParameters (ctx context.Context , cmd * cobra.Command , client * codersdk.Client , templateVersion codersdk.TemplateVersion , args prepWorkspaceBuildArgs ) ([]codersdk.CreateParameterRequest , error ) {
199
+ // Legacy parameters
217
200
parameterSchemas , err := client .TemplateVersionSchema (ctx , templateVersion .ID )
218
201
if err != nil {
219
202
return nil , err
@@ -231,7 +214,7 @@ func prepLegacyParameters(ctx context.Context, cmd *cobra.Command, client *coder
231
214
}
232
215
}
233
216
disclaimerPrinted := false
234
- parameters := make ([]codersdk.CreateParameterRequest , 0 )
217
+ legacyParameters := make ([]codersdk.CreateParameterRequest , 0 )
235
218
PromptParamLoop:
236
219
for _ , parameterSchema := range parameterSchemas {
237
220
if ! parameterSchema .AllowOverrideSource {
@@ -258,7 +241,7 @@ PromptParamLoop:
258
241
return nil , err
259
242
}
260
243
261
- parameters = append (parameters , codersdk.CreateParameterRequest {
244
+ legacyParameters = append (legacyParameters , codersdk.CreateParameterRequest {
262
245
Name : parameterSchema .Name ,
263
246
SourceValue : parameterValue ,
264
247
SourceScheme : codersdk .ParameterSourceSchemeData ,
@@ -267,10 +250,55 @@ PromptParamLoop:
267
250
}
268
251
_ , _ = fmt .Fprintln (cmd .OutOrStdout ())
269
252
253
+ // Rich parameters
254
+ templateVersionParameters , err := client .TemplateVersionRichParameters (cmd .Context (), templateVersion .ID )
255
+ if err != nil {
256
+ return nil , xerrors .Errorf ("get template version rich parameters" , err )
257
+ }
258
+
259
+ parameterMapFromFile = map [string ]string {}
260
+ useParamFile = false
261
+ if args .ParameterFile != "" {
262
+ useParamFile = true
263
+ _ , _ = fmt .Fprintln (cmd .OutOrStdout (), cliui .Styles .Paragraph .Render ("Attempting to read the variables from the rich parameter file." )+ "\r \n " )
264
+ parameterMapFromFile , err = createParameterMapFromFile (args .ParameterFile )
265
+ if err != nil {
266
+ return nil , err
267
+ }
268
+ }
269
+ disclaimerPrinted = false
270
+ richParameters := make ([]codersdk.WorkspaceBuildParameter , 0 )
271
+ PromptRichParamLoop:
272
+ for _ , templateVersionParameter := range templateVersionParameters {
273
+ if ! disclaimerPrinted {
274
+ _ , _ = fmt .Fprintln (cmd .OutOrStdout (), cliui .Styles .Paragraph .Render ("This template has customizable parameters. Values can be changed after create, but may have unintended side effects (like data loss)." )+ "\r \n " )
275
+ disclaimerPrinted = true
276
+ }
277
+
278
+ // Param file is all or nothing
279
+ if ! useParamFile {
280
+ for _ , e := range args .ExistingParams {
281
+ if e .Name == templateVersionParameter .Name {
282
+ // If the param already exists, we do not need to prompt it again.
283
+ // The workspace scope will reuse params for each build.
284
+ continue PromptRichParamLoop
285
+ }
286
+ }
287
+ }
288
+
289
+ parameterValue , err := getWorkspaceBuildParameterValueFromMapOrInput (cmd , parameterMapFromFile , templateVersionParameter )
290
+ if err != nil {
291
+ return nil , err
292
+ }
293
+
294
+ richParameters = append (richParameters , * parameterValue )
295
+ }
296
+
270
297
// Run a dry-run with the given parameters to check correctness
271
298
dryRun , err := client .CreateTemplateVersionDryRun (cmd .Context (), templateVersion .ID , codersdk.CreateTemplateVersionDryRunRequest {
272
299
WorkspaceName : args .NewWorkspaceName ,
273
- ParameterValues : parameters ,
300
+ ParameterValues : legacyParameters ,
301
+ // TODO RichParameterValues
274
302
})
275
303
if err != nil {
276
304
return nil , xerrors .Errorf ("begin workspace dry-run: %w" , err )
@@ -309,9 +337,9 @@ PromptParamLoop:
309
337
if err != nil {
310
338
return nil , err
311
339
}
312
- return parameters , nil
313
- }
314
340
315
- func prepRichParameters () ([]codersdk.WorkspaceBuildParameter , error ) {
316
- return nil , nil
341
+ return & buildParameters {
342
+ parameters : legacyParameters ,
343
+ richParameters : richParameters ,
344
+ }, nil
317
345
}
0 commit comments