mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
fix: prompt when parameter options are incompatible (#9247)
This commit is contained in:
@@ -141,6 +141,10 @@ next:
|
||||
continue // immutables should not be passed to consecutive builds
|
||||
}
|
||||
|
||||
if len(tvp.Options) > 0 && !isValidTemplateParameterOption(buildParameter, tvp.Options) {
|
||||
continue // do not propagate invalid options
|
||||
}
|
||||
|
||||
for i, r := range resolved {
|
||||
if r.Name == buildParameter.Name {
|
||||
resolved[i].Value = buildParameter.Value
|
||||
@@ -180,10 +184,12 @@ func (pr *ParameterResolver) resolveWithInput(resolved []codersdk.WorkspaceBuild
|
||||
// Parameter has not been resolved yet, so CLI needs to determine if user should input it.
|
||||
|
||||
firstTimeUse := pr.isFirstTimeUse(tvp.Name)
|
||||
promptParameterOption := pr.isLastBuildParameterInvalidOption(tvp)
|
||||
|
||||
if (tvp.Ephemeral && pr.promptBuildOptions) ||
|
||||
(action == WorkspaceCreate && tvp.Required) ||
|
||||
(action == WorkspaceCreate && !tvp.Ephemeral) ||
|
||||
(action == WorkspaceUpdate && promptParameterOption) ||
|
||||
(action == WorkspaceUpdate && tvp.Mutable && tvp.Required) ||
|
||||
(action == WorkspaceUpdate && !tvp.Mutable && firstTimeUse) ||
|
||||
(action == WorkspaceUpdate && tvp.Mutable && !tvp.Ephemeral && pr.promptRichParameters) {
|
||||
@@ -207,6 +213,19 @@ func (pr *ParameterResolver) isFirstTimeUse(parameterName string) bool {
|
||||
return findWorkspaceBuildParameter(parameterName, pr.lastBuildParameters) == nil
|
||||
}
|
||||
|
||||
func (pr *ParameterResolver) isLastBuildParameterInvalidOption(templateVersionParameter codersdk.TemplateVersionParameter) bool {
|
||||
if len(templateVersionParameter.Options) == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
for _, buildParameter := range pr.lastBuildParameters {
|
||||
if buildParameter.Name == templateVersionParameter.Name {
|
||||
return !isValidTemplateParameterOption(buildParameter, templateVersionParameter.Options)
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func findTemplateVersionParameter(workspaceBuildParameter codersdk.WorkspaceBuildParameter, templateVersionParameters []codersdk.TemplateVersionParameter) *codersdk.TemplateVersionParameter {
|
||||
for _, tvp := range templateVersionParameters {
|
||||
if tvp.Name == workspaceBuildParameter.Name {
|
||||
@@ -224,3 +243,12 @@ func findWorkspaceBuildParameter(parameterName string, params []codersdk.Workspa
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func isValidTemplateParameterOption(buildParameter codersdk.WorkspaceBuildParameter, options []codersdk.TemplateVersionParameterOption) bool {
|
||||
for _, opt := range options {
|
||||
if opt.Value == buildParameter.Value {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user