Skip to content

Commit ff552ba

Browse files
committed
fix: use MinDisabled, MaxDisabled for parameter validation
1 parent 80269ba commit ff552ba

File tree

5 files changed

+46
-24
lines changed

5 files changed

+46
-24
lines changed

codersdk/richparameters.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -78,22 +78,24 @@ func ValidateWorkspaceBuildParameter(richParameter TemplateVersionParameter, bui
7878
return nil
7979
}
8080

81-
validation := &provider.Validation{
82-
Min: ptrInt(richParameter.ValidationMin),
83-
Max: ptrInt(richParameter.ValidationMax),
84-
Regex: richParameter.ValidationRegex,
85-
Error: richParameter.ValidationError,
86-
Monotonic: string(richParameter.ValidationMonotonic),
81+
var min, max int
82+
if richParameter.ValidationMin != nil {
83+
min = int(*richParameter.ValidationMin)
84+
}
85+
if richParameter.ValidationMax != nil {
86+
max = int(*richParameter.ValidationMax)
8787
}
88-
return validation.Valid(richParameter.Type, value)
89-
}
9088

91-
func ptrInt(number *int32) *int {
92-
if number == nil {
93-
return nil
89+
validation := &provider.Validation{
90+
Min: min,
91+
Max: max,
92+
MinDisabled: richParameter.ValidationMin == nil,
93+
MaxDisabled: richParameter.ValidationMax == nil,
94+
Regex: richParameter.ValidationRegex,
95+
Error: richParameter.ValidationError,
96+
Monotonic: string(richParameter.ValidationMonotonic),
9497
}
95-
n := int(*number)
96-
return &n
98+
return validation.Valid(richParameter.Type, value)
9799
}
98100

99101
func findBuildParameter(params []WorkspaceBuildParameter, parameterName string) (*WorkspaceBuildParameter, bool) {

codersdk/richparameters_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,18 @@ func TestRichParameterValidation(t *testing.T) {
226226
{Name: boolParameterName, Type: "bool", Mutable: true},
227227
}
228228

229+
numberRichParametersMinOnly := []codersdk.TemplateVersionParameter{
230+
{Name: stringParameterName, Type: "string", Mutable: true},
231+
{Name: numberParameterName, Type: "number", Mutable: true, ValidationMin: ptr.Ref(int32(5))},
232+
{Name: boolParameterName, Type: "bool", Mutable: true},
233+
}
234+
235+
numberRichParametersMaxOnly := []codersdk.TemplateVersionParameter{
236+
{Name: stringParameterName, Type: "string", Mutable: true},
237+
{Name: numberParameterName, Type: "number", Mutable: true, ValidationMax: ptr.Ref(int32(5))},
238+
{Name: boolParameterName, Type: "bool", Mutable: true},
239+
}
240+
229241
monotonicIncreasingNumberRichParameters := []codersdk.TemplateVersionParameter{
230242
{Name: stringParameterName, Type: "string", Mutable: true},
231243
{Name: numberParameterName, Type: "number", Mutable: true, ValidationMin: ptr.Ref(int32(3)), ValidationMax: ptr.Ref(int32(10)), ValidationMonotonic: "increasing"},
@@ -271,6 +283,14 @@ func TestRichParameterValidation(t *testing.T) {
271283
{numberParameterName, "10", true, numberRichParameters},
272284
{numberParameterName, "11", false, numberRichParameters},
273285

286+
{numberParameterName, "4", false, numberRichParametersMinOnly},
287+
{numberParameterName, "5", true, numberRichParametersMinOnly},
288+
{numberParameterName, "6", true, numberRichParametersMinOnly},
289+
290+
{numberParameterName, "4", true, numberRichParametersMaxOnly},
291+
{numberParameterName, "5", true, numberRichParametersMaxOnly},
292+
{numberParameterName, "6", false, numberRichParametersMaxOnly},
293+
274294
{numberParameterName, "6", false, monotonicIncreasingNumberRichParameters},
275295
{numberParameterName, "7", true, monotonicIncreasingNumberRichParameters},
276296
{numberParameterName, "8", true, monotonicIncreasingNumberRichParameters},

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ require (
7575
github.com/codeclysm/extract v2.2.0+incompatible
7676
github.com/coder/flog v1.1.0
7777
github.com/coder/retry v1.4.0
78-
github.com/coder/terraform-provider-coder v0.8.1
78+
github.com/coder/terraform-provider-coder v0.8.2
7979
github.com/coder/wgtunnel v0.1.5
8080
github.com/coreos/go-oidc/v3 v3.6.0
8181
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,8 +336,8 @@ github.com/coder/ssh v0.0.0-20230421140225-04bb837133e1 h1:LBw76rEDuhNJyohve11mb
336336
github.com/coder/ssh v0.0.0-20230421140225-04bb837133e1/go.mod h1:ZSS+CUoKHDrqVakTfTWUlKSr9MtMFkC4UvtQKD7O914=
337337
github.com/coder/tailscale v0.0.0-20230522123520-74712221d00f h1:F0Xr1d8h8dAHn7tab1HXuzYFkcjmCydnEfdMbkOhlVk=
338338
github.com/coder/tailscale v0.0.0-20230522123520-74712221d00f/go.mod h1:jpg+77g19FpXL43U1VoIqoSg1K/Vh5CVxycGldQ8KhA=
339-
github.com/coder/terraform-provider-coder v0.8.1 h1:i/LhvFi+Ei0gL+h4GItJfwtxjcITTlQhS+R8J+0vRo8=
340-
github.com/coder/terraform-provider-coder v0.8.1/go.mod h1:UIfU3bYNeSzJJvHyJ30tEKjD6Z9utloI+HUM/7n94CY=
339+
github.com/coder/terraform-provider-coder v0.8.2 h1:EPhkdpsNd8fcg6eqpAQr+W1eRrEAMtugoqujoTK4O6o=
340+
github.com/coder/terraform-provider-coder v0.8.2/go.mod h1:UIfU3bYNeSzJJvHyJ30tEKjD6Z9utloI+HUM/7n94CY=
341341
github.com/coder/wgtunnel v0.1.5 h1:WP3sCj/3iJ34eKvpMQEp1oJHvm24RYh0NHbj1kfUKfs=
342342
github.com/coder/wgtunnel v0.1.5/go.mod h1:bokoUrHnUFY4lu9KOeSYiIcHTI2MO1KwqumU4DPDyJI=
343343
github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE=

provisioner/terraform/resources.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -483,8 +483,12 @@ func ConvertState(modules []*tfjson.StateModule, rawGraph string, rawParameterNa
483483
if len(param.Validation) == 1 {
484484
protoParam.ValidationRegex = param.Validation[0].Regex
485485
protoParam.ValidationError = param.Validation[0].Error
486-
protoParam.ValidationMax = ptrInt32(param.Validation[0].Max)
487-
protoParam.ValidationMin = ptrInt32(param.Validation[0].Min)
486+
if !param.Validation[0].MaxDisabled {
487+
protoParam.ValidationMax = ptrInt32(param.Validation[0].Max)
488+
}
489+
if !param.Validation[0].MinDisabled {
490+
protoParam.ValidationMin = ptrInt32(param.Validation[0].Min)
491+
}
488492
protoParam.ValidationMonotonic = param.Validation[0].Monotonic
489493
}
490494
if len(param.Option) > 0 {
@@ -527,12 +531,8 @@ func ConvertState(modules []*tfjson.StateModule, rawGraph string, rawParameterNa
527531
}, nil
528532
}
529533

530-
func ptrInt32(number *int) *int32 {
531-
var n int32
532-
if number == nil {
533-
return &n
534-
}
535-
n = int32(*number)
534+
func ptrInt32(number int) *int32 {
535+
n := int32(number)
536536
return &n
537537
}
538538

0 commit comments

Comments
 (0)