MCPcopy Index your code
hub / github.com/coder/coder / resolveWithInput

Method resolveWithInput

cli/parameterresolver.go:308–363  ·  view source on GitHub ↗
(resolved []codersdk.WorkspaceBuildParameter, inv *serpent.Invocation, action WorkspaceCLIAction, templateVersionParameters []codersdk.TemplateVersionParameter)

Source from the content-addressed store, hash-verified

306}
307
308func (pr *ParameterResolver) resolveWithInput(resolved []codersdk.WorkspaceBuildParameter, inv *serpent.Invocation, action WorkspaceCLIAction, templateVersionParameters []codersdk.TemplateVersionParameter) ([]codersdk.WorkspaceBuildParameter, error) {
309 for _, tvp := range templateVersionParameters {
310 p := findWorkspaceBuildParameter(tvp.Name, resolved)
311 if p != nil {
312 continue
313 }
314 // PreviewParameter has not been resolved yet, so CLI needs to determine if user should input it.
315
316 firstTimeUse := pr.isFirstTimeUse(tvp.Name)
317 promptParameterOption := pr.isLastBuildParameterInvalidOption(tvp)
318
319 if (tvp.Ephemeral && pr.promptEphemeralParameters) ||
320 (action == WorkspaceCreate && tvp.Required) ||
321 (action == WorkspaceCreate && !tvp.Ephemeral) ||
322 (action == WorkspaceUpdate && promptParameterOption) ||
323 (action == WorkspaceUpdate && tvp.Mutable && tvp.Required) ||
324 (action == WorkspaceUpdate && !tvp.Mutable && firstTimeUse) ||
325 (tvp.Mutable && !tvp.Ephemeral && pr.promptRichParameters) {
326 name := tvp.Name
327 if tvp.DisplayName != "" {
328 name = tvp.DisplayName
329 }
330
331 parameterValue := tvp.DefaultValue
332 cliDefault, cliDefaultProvided := pr.richParametersDefaults[tvp.Name]
333 if cliDefaultProvided {
334 parameterValue = cliDefault
335 }
336
337 // Auto-accept the default value when one exists.
338 // A parameter has a usable default if a CLI
339 // default was provided via --parameter-default, or
340 // the template parameter is not required (meaning
341 // a default was set in Terraform, even if it is
342 // an empty string).
343 hasDefault := cliDefaultProvided || !tvp.Required
344 if pr.useParameterDefaults && hasDefault {
345 _, _ = fmt.Fprintf(inv.Stdout, "Using default value for %s: '%s'\n", name, parameterValue)
346 } else {
347 var err error
348 parameterValue, err = cliui.RichParameter(inv, tvp, name, parameterValue)
349 if err != nil {
350 return nil, err
351 }
352 }
353
354 resolved = append(resolved, codersdk.WorkspaceBuildParameter{
355 Name: tvp.Name,
356 Value: parameterValue,
357 })
358 } else if action == WorkspaceUpdate && !tvp.Mutable && !firstTimeUse {
359 _, _ = fmt.Fprintln(inv.Stdout, pretty.Sprint(cliui.DefaultStyles.Warn, fmt.Sprintf("Parameter %q is not mutable, and cannot be customized after workspace creation.", tvp.Name)))
360 }
361 }
362 return resolved, nil
363}
364
365func (pr *ParameterResolver) isFirstTimeUse(parameterName string) bool {

Callers 1

ResolveMethod · 0.95

Calls 4

isFirstTimeUseMethod · 0.95
RichParameterFunction · 0.92

Tested by

no test coverage detected