ValidateResolve checks the provided value, v, against the parameter, p, and the previous build. If v is nil, it also resolves the correct value. It returns the value of the parameter, if valid, and an error if invalid.
(p TemplateVersionParameter, v *WorkspaceBuildParameter)
| 193 | // ValidateResolve checks the provided value, v, against the parameter, p, and the previous build. If v is nil, it also |
| 194 | // resolves the correct value. It returns the value of the parameter, if valid, and an error if invalid. |
| 195 | func (r *ParameterResolver) ValidateResolve(p TemplateVersionParameter, v *WorkspaceBuildParameter) (value string, err error) { |
| 196 | prevV := r.findLastValue(p) |
| 197 | if !p.Mutable && v != nil && prevV != nil && v.Value != prevV.Value { |
| 198 | return "", xerrors.Errorf("Parameter %q is not mutable, so it can't be updated after creating a workspace.", p.Name) |
| 199 | } |
| 200 | if p.Required && v == nil && prevV == nil { |
| 201 | return "", xerrors.Errorf("Parameter %q is required but not provided", p.Name) |
| 202 | } |
| 203 | // First, the provided value |
| 204 | resolvedValue := v |
| 205 | // Second, previous value if not ephemeral |
| 206 | if resolvedValue == nil && !p.Ephemeral { |
| 207 | resolvedValue = prevV |
| 208 | } |
| 209 | // Last, default value |
| 210 | if resolvedValue == nil { |
| 211 | resolvedValue = &WorkspaceBuildParameter{ |
| 212 | Name: p.Name, |
| 213 | Value: p.DefaultValue, |
| 214 | } |
| 215 | } |
| 216 | err = ValidateWorkspaceBuildParameter(p, resolvedValue, prevV) |
| 217 | if err != nil { |
| 218 | return "", err |
| 219 | } |
| 220 | return resolvedValue.Value, nil |
| 221 | } |
| 222 | |
| 223 | // Resolve returns the value of the parameter. It does not do any validation, |
| 224 | // and is meant for use with the new dynamic parameters code path. |